Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何告诉CMake不要搜索库的系统路径_Cmake - Fatal编程技术网

如何告诉CMake不要搜索库的系统路径

如何告诉CMake不要搜索库的系统路径,cmake,Cmake,我有一个项目使用了几个不同的开源库(例如FFmpeg、OpenSSL) 无论我尝试什么,CMake都是针对这些库的系统安装版本进行链接,而不是针对我的项目所需的定制版本 下面是我尝试添加FFmpeg库“libswresample”的示例: set(FFMPEG_PATH "/shared/dev/libs/ffmpeg/3.4.2") find_library(LIBSWRESAMPLE_LIB NAMES swresample PATHS ${FFMPEG_PATH}/lib/

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

无论我尝试什么,CMake都是针对这些库的系统安装版本进行链接,而不是针对我的项目所需的定制版本

下面是我尝试添加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\u PREFIX\u PATH
设置为共享库的位置-运气不好

我尝试过使用“NO\u SOMETHING\u PATH”选项的各种组合,但似乎没有帮助。我还尝试过只给
find\u library()
PATHS
参数
${FFMPEG\u PATH}
,并提供
PATH\u后缀lib${ARCH}
(这将是理想的,因为我为多个平台构建了这个项目),但这也不起作用

无论我尝试了什么,消息都会输出
libs:/usr/local/lib/libswresample.dylib
,而不是
libs:/shared/dev/libs/ffmpeg/3.4.2/lib/darwin-amd64/libswresample.dylib

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

如果我显式地提供库的绝对路径,我可以让它工作,但这显然不是最佳的,因为有些平台使用静态库,有些使用共享库,等等。如果我要走这条路,我必须做额外的工作来确定我要为哪个平台建造,而这似乎不是正确的方法


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

代码可以工作,但是您应该清除CMake缓存(从构建目录中删除
CMakeCache.txt
文件),以便重新搜索库



选项
NO\u DEFAULT\u PATH
意味着所有其他
NO*
选项,因此您可以忽略它们。

代码可以工作,但是您应该清除CMake缓存(从生成目录中删除
CMakeCache.txt
文件),以便重新搜索库



选项
无默认路径
意味着所有其他
无默认路径*
选项,因此您可以忽略它们。

传递无默认路径应禁用所有其他路径。可能您忘记清除CMake缓存(从构建目录中删除
CMakeCache.txt
文件)以重新搜索库。天哪。看,就像我怀疑的。。。简单的事情。谢谢如果你想把它作为一个答案,我很乐意接受。传递NO_DEFAULT_路径应该会禁用所有其他路径。可能您忘记清除CMake缓存(从构建目录中删除
CMakeCache.txt
文件)以重新搜索库。天哪。看,就像我怀疑的。。。简单的事情。谢谢如果你想把它作为一个答案,我很乐意接受。