我有一个项目使用了几个不同的开源库(例如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库,而不是我真正想要链接的那个。
如果我明确提供了库的绝对路径,我可以使它工作,但这显然不是最佳的,因为一些平台使用静态库,一些使用共享库,等等。如果我要走那条路,我还需要做额外的工作来弄清楚我要建立哪个平台,而且看起来这似乎是正确的方法。
我知道我必须错过一些简单的事情。有人能指出我正确的方向吗?
答案 0 :(得分:2)
代码有效,但您应清除CMake缓存(从构建目录中删除CMakeCache.txt
文件)重新搜索库。
选项NO_DEFAULT_PATH
表示所有其他NO_*
选项,因此您可以省略它们。