- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 cmake find_package 查找要在我的应用程序中使用的 JPEG 库。我确实有两个该库的安装,系统一个,位于:
libjpeg: /usr/lib/x86_64-linux-gnu/libjpeg.a /usr/lib/x86_64-linux-gnu/libjpeg.so
另一个习俗位于:
/my/jpeg/instalation/lib/libjpeg.so
我想通过命令行决定我应该使用哪个版本。
例如,要使用自定义命令,我的 cmake 命令是:
cmake .. -DCMAKE_PREFIX_PATH=/my/jpeg/instalation
并且只查找系统的 cmake 命令将是:
cmake ..
当定义 CMAKE_PREFIX_PATH 时,我的 CMakeLists.txt 有类似这样的内容:
find_package(JPEG NO_SYSTEM_ENVIRONMENT_PATH REQUIRED)
当没有定义 CMAKE_PREFIX_PATH 时:
find_package(JPEG REQUIRED)
但是使用 NO_SYSTEM_ENVIRONMENT_PATH 没有找到库...我假设使用这个标志系统路径被忽略了,但似乎在 CMAKE_PREFIX_PATH 中声明的那些也被丢弃了...
基本上我希望在指定 CMAKE_PREFIX_PATH 时不考虑系统库,并且在不指定 CMAKE_PREFIX_PATH 时应考虑系统库...
我认为这适用于自定义路径的唯一方法是执行如下操作:
find_package(JPEG PATHS ${CMAKE_PREFIX_PATH} NO_DEFAULT_PATH)
但这也找不到...我完全迷失了这种 find_package 行为...
PS:我使用的是 cmake 版本 3.10.2,错误总是:
CMake Error at CMakeLists.txt:7 (find_package):
Could not find a package configuration file provided by "JPEG" with any of
the following names:
JPEGConfig.cmake
jpeg-config.cmake
Add the installation prefix of "JPEG" to CMAKE_PREFIX_PATH or set
"JPEG_DIR" to a directory containing one of the above files. If "JPEG"
provides a separate development package or SDK, be sure it has been
installed.
我没有意识到 find_package 设置仅用于 find_package 功能,即搜索 FindJPEG.cmake 或 JPEGconfig.cmake 脚本而不是这些脚本的内容。我想要的只是使用查找路径或文件的特定函数来完成,例如在 Tom 示例中,但使用 find_library 是这样的:
set(CUSTOM_JPEG_PATH ON CACHE BOOL "use only custom paths")
set(JPEG_NAMES ${JPEG_NAMES} jpeg libjpeg)
if(CUSTOM_JPEG_PATH)
#find_package(JPEG REQUIRED
find_library(JPEG_LIBRARY NAMES ${JPEG_NAMES}
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_SYSTEM_PATH
)
else()
#find_package(JPEG REQUIRED
find_library(JPEG_LIBRARY NAMES ${JPEG_NAMES}
)
endif()
这一切都像预期的那样工作(而不是给出自定义安装的根文件夹,我需要给出确切的位置 -/my/jpeg/instalation/lib - 才能工作)。但这不是我想要的,我不想为了得到我想要的东西而重写所有的 FindXXX.cmake 脚本,这些查找脚本有更多关于它们的依赖关系、编译标志等的细节......所以我猜没有办法只使用 find_package(...)... 做我想做的事情
最佳答案
我希望它在没有您的NO_SYSTEM_ENVIRONMENT_PATH
方法的情况下也能正常工作。只需使用 find_package(JPEG REQUIRED)
。如果设置了 CMAKE_PREFIX_PATH
,则 find_package 将首先查看该目录。
如果你特别想要它,你可以为你的 find_package
调用指定 PATHS
或 HINTS
:
set(CUSTOM_JPEG_PATH "" CACHE STRING "path to custom installation of libjpeg")
if(CUSTOM_JPEG_PATH)
find_package(JPEG REQUIRED
PATHS ${CUSTOM_JPEG_PATH}
NO_SYSTEM_ENVIRONMENT_PATH
)
else()
find_package(JPEG REQUIRED) #default search
endif()
关于c++ - CMake find_package 和 NO_SYSTEM_ENVIRONMENT_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54818615/
我正在使用 cmake find_package 查找要在我的应用程序中使用的 JPEG 库。我确实有两个该库的安装,系统一个,位于: libjpeg: /usr/lib/x86_64-linux-g
我是一名优秀的程序员,十分优秀!