C++ 如何通过Conan和CMake查找pkg config的.pc文件
如何使pkg config同时查找通过Conan安装的依赖项和不在Conan中的依赖项 我的目标包是使用CMake构建的,并使用pkg config和C++ 如何通过Conan和CMake查找pkg config的.pc文件,c++,cmake,pkg-config,conan,C++,Cmake,Pkg Config,Conan,如何使pkg config同时查找通过Conan安装的依赖项和不在Conan中的依赖项 我的目标包是使用CMake构建的,并使用pkg config和pkg\u check\u modules()查找其依赖项。其中一个依赖项(glib-2.0)是通过Conan安装的,另一个(libsecret-1)不是,因为没有软件包 在我的conanfile中,我将pkg-config_安装程序配置为一个构建需求(self.build_requires)(“pkg-config_安装程序/0.29”)。2@b
pkg\u check\u modules()
查找其依赖项。其中一个依赖项(glib-2.0
)是通过Conan安装的,另一个(libsecret-1
)不是,因为没有软件包
在我的conanfile中,我将pkg-config_安装程序配置为一个构建需求(self.build_requires)(“pkg-config_安装程序/0.29”)。2@bincrafters/稳定”)
。构建包时,CMake会正确调用此pkg配置
因此,pkg config可以找到glib,但找不到libsecret。我假设它可以找到通过Conan安装的依赖项的.pc
文件,但找不到libsecret-1.pc
,它位于我的系统上的/usr/lib/pkgconfig/
我试着告诉柯南的CMake工具使用这个路径:
tools.PkgConfig(“libsecret-1”).variables[“pcfiledir”]
告诉我它在哪里,CMake工具的configure方法有一个pkg\u config\u path
参数。不幸的是,这并没有改变任何东西。以下步骤使它对我有效:
- 将环境变量
PKG\u CONFIG\u PATH设置为
tools.PkgConfig
- 不要将任何
传递到pkg\u config\u路径
,它不能很好地处理绝对路径,并且与环境变量冲突tools.CMake.configure()
- 在
步骤中将系统范围的已安装库(package\u info
在我的例子中)添加到secret-1
cpp\u info.system\u libs
感谢@uiliaries提供的有用评论!查看文档:您有3种不同的方法来自定义前缀。您可以附加PKG\u CONFIG\u路径、设置--define prefix参数,甚至设置PKG\u CONFIG\u$PACKAGE\u$VARIABLE