在 CMake 脚本中添加到 pkg-config 的临时路径?

Posted

技术标签:

【中文标题】在 CMake 脚本中添加到 pkg-config 的临时路径?【英文标题】:Add temporarily path to pkg-config within CMake script? 【发布时间】:2013-12-25 05:11:35 【问题描述】:

对于外部库,用户可以通过添加CMAKE_FLAGS 的路径或添加-DMYLIB_ROOT 来指定非标准位置。在 CMake 脚本中,我想找到库的 pkg-config pc 文件。因为pc文件不在标准文件夹中,所以用FindPkgConfigpkg_search_module的pkg-config找不到。

我尝试将用户给定的路径添加到PKG_CONFIG_PATH,但它似乎被忽略了:

include(FindPkgConfig)
set(PKG_CONFIG_PATH "$PKG_CONFIG_PATH:$MYLIB_ROOT/lib/pkgconfig")
pkg_search_module(PKG_MYLIB mylib)

if($PKG_MYLIB_FOUND)
...

当我从终端调用 pkg-config 并设置修改后的PKG_CONFIG_PATH 时,它会找到 pc 文件。我究竟做错了什么?我怎样才能让pkg_search_module 工作?我想避免直接从 CMake 调用 pkg-config。

【问题讨论】:

【参考方案1】:

也许下面的就行了

set( ENVPKG_CONFIG_PATH "$ENVPKG_CONFIG_PATH:$MYLIB_ROOT/lib/pkgconfig" )

【讨论】:

你是对的,这就是使用 CMake 3.0 或更早版本时要走的路。在 3.1 中,它将自动包含在内。【参考方案2】:

这是一个已知问题和ticket exists in CMake's bugtracker,但由于缺乏开发人员的兴趣而被搁置。我想必须先提供一个补丁...

编辑:根据 bugtracker 的说法,该功能已经实现并且是 CMake 3.1 的一部分。

【讨论】:

以上是关于在 CMake 脚本中添加到 pkg-config 的临时路径?的主要内容,如果未能解决你的问题,请参考以下文章

从`cmake`使用`pkg-config`的正确方法是啥?

CMake Pkg-Config 库链接路径

从 CMake / PkgConfig 为 pkg-config 提供选项 --define-variable

在 Cmake 中包含 pkg-config --cflags --libs gtk+-2.0

pkg-config 在不同opencv中切换

CMake的pkg-config模块使用