PkgConfig

此工具可以执行 pkg_config 可执行文件,以提取现有 .pc 文件中的信息。例如,这对于基于系统中已安装的库创建“系统”包配方非常有用,也是一种从系统中自动提取 .pc 信息的方式。或者,如果某个专有包的构建系统仅输出 .pc 文件。

用法

读取 pc 文件并访问信息

pkg_config = PkgConfig(conanfile, "libastral", pkg_config_path=<somedir>)

print(pkg_config.provides) # something like"libastral = 6.6.6"
print(pkg_config.version) # something like"6.6.6"
print(pkg_config.includedirs) # something like['/usr/local/include/libastral']
print(pkg_config.defines) # something like['_USE_LIBASTRAL']
print(pkg_config.libs) # something like['astral', 'm']
print(pkg_config.libdirs) # something like['/usr/local/lib/libastral']
print(pkg_config.linkflags) # something like['-Wl,--whole-archive']
print(pkg_config.variables['prefix']) # something like'/usr/local'

使用 pc 文件信息填充 cpp_info 对象

def package_info(self):
    pkg_config = PkgConfig(conanfile, "libastral", pkg_config_path=tmp_dir)
    pkg_config.fill_cpp_info(self.cpp_info, is_system=False, system_libs=["m", "rt"])

参考

class PkgConfig(conanfile, library, pkg_config_path=None)
参数:
  • conanfile – 当前的配方对象。始终使用 self

  • library – 要解析其 .pc 文件的库。它必须存在于 pkg_config 路径中。

  • pkg_config_path – 如果已定义,它将被添加到 PKG_CONFIG_PATH 环境变量的前面,以便执行能够找到所需文件。

fill_cpp_info(cpp_info, is_system=True, system_libs=None)

从 PkgConfig 配置填充 cpp_info 对象的方法

参数:
  • cpp_info – 可以是全局的(self.cpp_info)或组件的(self.components[“foo”].cpp_info)。

  • is_system – 如果为 True,所有检测到的库都将被分配到 cpp_info.system_libs,而不会分配到 cpp_info.libs

  • system_libs – 如果为 True,所有检测到的库都将被分配到 cpp_info.system_libs,而不会分配到 cpp_info.libs

conf

此助手将监听 global.conf 中的 tools.gnu:pkg_config,以定义 pkg_config 可执行文件的名称或完整路径。默认情况下,它是 pkg-config