为何CMAKE_PREFIX_PATH配置无效,PKG_CONFIG_PATH可解决库链接问题?
为什么用CMAKE_PREFIX_PATH链接FFmpeg库无效,而PKG_CONFIG_PATH环境变量却能解决问题?
两者根本不是一回事
CMAKE_PREFIX_PATH是给CMake自己用的,它只负责找CMake专属的配置文件(比如XXXConfig.cmake或者FindXXX.cmake),和pkg-config工具完全不搭边。PKG_CONFIG_PATH是pkg-config的专属环境变量,专门用来告诉它去哪里找.pc配置文件——而你要链接的libavcodec这类FFmpeg库,基本都是靠pkg-config的.pc文件提供链接信息的。
方法一失效的原因
你设置CMAKE_PREFIX_PATH后,CMake只会在这个路径下搜自己的配置文件,但FFmpeg默认编译后根本不会生成CMake能用的FFmpegConfig.cmake这类文件,只会生成.pc文件。CMake找不到对应的包配置信息,自然就报错说找不到需要的包了。
方法二有效的原因
set(ENV{PKG_CONFIG_PATH} ${pkgconfig_path})直接给pkg-config工具指对了路,让它能找到你指定路径下的FFmpeg.pc文件。当CMake调用pkg_check_modules()这类依赖pkg-config的命令时,就能拿到正确的库链接参数,问题自然就解决了。
额外提一句
如果你的FFmpeg是特意编译生成了CMake配置文件的,那CMAKE_PREFIX_PATH才会有用,但这种情况很少见——绝大多数时候,FFmpeg都是靠pkg-config来对外提供链接信息的。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

