如何通过Conan和CMake找到用于pkg配置的.pc文件

How to find .pc files for pkg-config via Conan and CMake

本文关键字:配置 pkg pc 文件 用于 Conan 何通过 CMake      更新时间:2023-10-16

如何让pkg config找到通过Conan安装的两个依赖项以及Conan中没有的依赖项?

我的目标软件包是使用CMake构建的,并使用带有pkg_check_modules()的pkg配置查找其依赖项。其中一个依赖项(glib-2.0(是通过Conan安装的,另一个(libsecret-1(不是,因为没有包。

在我的conanfile中,我将pkg-config_installer配置为构建需求(self.build_requires("pkg-config_installer/0.29.2@bincrafters/stable")(。在构建软件包时,CMake正确地调用此pkg config.

因此,pkg config可以找到glib,但找不到libsecret。我假设它找到了通过Conan安装的依赖项的.pc文件,但没有找到libsecret-1.pc,它位于我的系统上的/usr/lib/pkgconfig/中。

我试着告诉Conan的CMake工具使用这个路径:tools.PkgConfig("libsecret-1").variables["pcfiledir"]告诉我它在哪里,CMake的配置方法有一个pkg_config_paths参数。不幸的是,这并没有改变什么。

以下步骤使它对我有效:

  • PKG_CONFIG_PATH环境变量设置为tools.PkgConfig找到的pcfiledir
  • 不要将任何pkg_config_paths传递给tools.CMake.configure(),它不能很好地处理绝对路径,并且与环境变量冲突
  • package_info步骤中将系统范围内安装的lib(在我的情况下为secret-1(添加到cpp_info.system_libs

感谢@uilianries的有益评论!