如何告诉CMake NOT不要搜索库的

时间:2018-04-11 21:22:13

标签: cmake

我有一个项目使用了几个不同的开源库(例如FFmpeg,OpenSSL)。

无论我尝试什么,CMake都会链接这些库的SYSTEM安装版本,而不是我项目所需的定制版本。

以下是我尝试添加FFmpeg库的示例' libswresample':

set(FFMPEG_PATH "/shared/dev/libs/ffmpeg/3.4.2")
find_library(LIBSWRESAMPLE_LIB NAMES swresample
        PATHS ${FFMPEG_PATH}/lib/darwin-amd64
        NO_DEFAULT_PATH
        NO_CMAKE_ENVIRONMENT PATH
        NO_CMAKE_PATH
        NO_SYSTEM_ENVIRONMENT_PATH
        NO_CMAKE_SYSTEM_PATH
        NO_CMAKE_FIND_ROOT_PATH)
list(APPEND includes "${FFMPEG_PATH}/include")
link_directories("${FFMPEG_PATH}/lib/${ARCH}")
list(APPEND libs ${LIBSWRESAMPLE_LIB})
MESSAGE(STATUS "libs: ${libs}")

我尝试将CMAKE_PREFIX_PATH设置为共享库的位置 - 没有运气。

我已经尝试了各种组合的" NO_SOMETHING_PATH"选项,似乎没有帮助。我还尝试将${FFMPEG_PATH}提供给PATHS的{​​{1}}参数并提供find_library()(这是理想的,因为我为多个平台构建了这个项目),但是没有也可以工作。

无论我尝试过什么,MESSAGE都会输出PATH_SUFFIXES lib ${ARCH},而不是libs: /usr/local/lib/libswresample.dylib

我找到了几个FindFFMpeg模块,但他们都在做我在这里尝试的事情,最终找到系统安装的FFmpeg库,而不是我真正想要链接的那个。

如果我明确提供了库的绝对路径,我可以使它工作,但这显然不是最佳的,因为一些平台使用静态库,一些使用共享库,等等。如果我要走那条路,我还需要做额外的工作来弄清楚我要建立哪个平台,而且看起来这似乎是正确的方法。

我知道我必须错过一些简单的事情。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

代码有效,但您应清除CMake缓存(从构建目录中删除CMakeCache.txt文件)重新搜索库。

选项NO_DEFAULT_PATH表示所有其他NO_*选项,因此您可以省略它们。

相关问题