cmake_pkg_config

从 3.31 版添加。

处理 pkg-config 格式的软件包文件。

概要

cmake_pkg_config(EXTRACT <package> [<version>] [...])

引言

该命令从 pkg-config 格式的软件包文件本身生成 CMake 变量和目标,而不需要调用或甚至不需要存在 pkg-config 实现。一个 <package> 既可以是软件包文件的绝对路径,也可以是使用典型 pkg-config 搜索模式搜索的软件包名称。可选的 <version> 字符串具有与 pkg-config 风格版本说明符相同的格式和语义,但如果未指定比较运算符,则假定为 =

此命令有多个签名,其中一些选项是公用的。它们是

EXACT / QUIET / REQUIRED

EXACT 选项要求完全匹配版本字符串(包括空字符串,如果未提供版本),从而覆盖典型的 pkg-config 版本比较算法。这会忽略附加到版本字符串的任何比较运算符。

QUIET 选项禁用信息性消息,包括如果 REQUIRED 为 false 则通知无法找到软件包的消息。REQUIRED 选项会在找不到软件包时停止处理,并显示错误消息。

STRICTNESS <mode>

指定在解析和解析期间的严格程度,遵守该严格程度模式。在提供的严格程度模式下,无效的文件将导致命令失败。可能的模式有

  • STRICT:密切反映原始 FDO pkg-config 的行为。变量和关键字必须是唯一的。必须在用于变量之前对其进行定义。必须存在 Name、Description 和 Version 关键字。文件的总体结构必须有效且可解析。

  • PERMISSIVE:密切反映 pkgconf 实现的行为。重复的变量将被覆盖。重复的关键字将被附加。未定义的变量将解析为字符串。必须存在 Name、Description 和 Version 关键字。文件的总体结构必须有效且可解析。

  • BEST_EFFORT: 与 PERMISSIVE 在重复或未初始化变量和关键字方面的行为相同,但不会在任何情况下失败。需要 BEST_EFFORT 的软件包文件使用所有其他主要实现工具进行验证时会失败,应进行修复。

默认严格性为 PERMISSIVE

ENV_MODE

指定了在运行给定命令时将查询哪些环境变量。可能模式为

  • FDO: 仅查询 freedesktop.org pkg-config 实现使用的 PKG_CONFIG_* 环境变量的原始集。

  • PKGCONF: 查询 pkgconf 实现使用的更广泛的环境变量集。

  • IGNORE: 完全忽略环境变量的存在、不存在和值。在所有情况下,都会将查询的环境变量视为定义好的,但为了操作的目的,值为空字符串。这不会修改当前环境。对于布尔环境变量(如 PKG_CONFIG_ALLOW_*),这意味着它们被评估为真。

    PKG_CONFIG_SYSROOT_PATH 是一个轻微的例外。当 ENV_MODE IGNORE 时,默认不会发生根路径前置,且 pc_sysrootdir 仍然默认为 /

目标生成子命令总是忽略标志过滤环境变量。默认环境模式是 PKGCONF

PC_LIBDIR <path>...

覆盖软件包文件的默认搜索位置;还用于派生 pc_path 软件包变量。

如果未提供此选项,则默认库目录是下列值中第一个可用的值

  1. CMAKE_PKG_CONFIG_PC_LIB_DIRS

  2. 环境变量 PKG_CONFIG_LIBDIR

  3. pkg-config --variable pc_path pkg-config 的输出

  4. 与平台相关的默认值

PC_PATH <path>...

覆盖将前置到搜索路径的补充软件包文件目录;还用于派生 pc_path 软件包变量。

如果未提供此选项,则默认路径是下列值中第一个可用的值

  1. CMAKE_PKG_CONFIG_PC_PATH

  2. 环境变量 PKG_CONFIG_PATH

  3. 空列表

DISABLE_UNINSTALLED <bool>

覆盖“未安装”软件包文件的搜索行为。这些软件包文件具有“-uninstalled”后缀,描述了直接从生成树集成的软件包。

通常,此类软件包文件比“已安装”软件包的优先级更高。当 DISABLE_UNINSTALLED 为 True 时,搜索“已卸载”软件包将被禁用。

如果未提供此选项,则默认搜索行为由下列值中第一个可用的值确定

  1. CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED

  2. 如果定义了环境变量 PKG_CONFIG_DISABLE_UNINSTALLED,则禁用搜索,否则启用搜索。

PC_SYSROOT_DIR <path>

重写前缀路径,这个路径将前置到 -I 编译标志和 -L 库搜索位置中,并用于导出 pc_sysrootdir 包变量。

如果没有提供此选项,那么默认的根路径由以下值的第一个可用值提供。

  1. CMAKE_PKG_CONFIG_SYSROOT_DIR

  2. PKG_CONFIG_SYSROOT_DIR 环境变量

  3. 如果没有提供根路径,那么 include 或库目录路径将不会被前置任何内容,并且 pc_sysrootdir 将被设置为 /

TOP_BUILD_DIR <path>

重写用于导出 pc_top_builddir 包变量的顶部构建目录路径。

如果没有提供此选项,那么默认的顶部构建目录路径由以下值的第一个可用值提供。

  1. CMAKE_PKG_CONFIG_TOP_BUILD_DIR

  2. PKG_CONFIG_TOP_BUILD_DIR 环境变量

  3. 如果没有提供顶部构建目录路径,那么将不会设置 pc_top_builddir 包变量

签名

cmake_pkg_config(EXTRACT <package> [<version>] [...])

提取包的内容到变量中。

cmake_pkg_config(EXTRACT <package> [<version>]
                [REQUIRED] [EXACT] [QUIET]
                [STRICTNESS <mode>]
                [ENV_MODE <mode>]
                [PC_LIBDIR <path>...]
                [PC_PATH <path>...]
                [DISABLE_UNINSTALLED <bool>]
                [PC_SYSROOT_DIR <path>]
                [TOP_BUILD_DIR <path>]
                [SYSTEM_INCLUDE_DIRS <path>...]
                [SYSTEM_LIBRARY_DIRS <path>...]
                [ALLOW_SYSTEM_INCLUDES <bool>]
                [ALLOW_SYSTEM_LIBS <bool>])

以下变量将从包文件的内容中填充。

变量

类型

定义

CMAKE_PKG_CONFIG_NAME

字符串

Name 关键字的值

CMAKE_PKG_CONFIG_DESCRIPTION

字符串

Description 关键字的值

CMAKE_PKG_CONFIG_VERSION

字符串

Version 关键字的值

CMAKE_PKG_CONFIG_PROVIDES

列表

Provides 关键字的值

CMAKE_PKG_CONFIG_REQUIRES

列表

Requires 关键字的值

CMAKE_PKG_CONFIG_CONFLICTS

列表

Conflicts 关键字的值

CMAKE_PKG_CONFIG_CFLAGS

字符串

CFlags / Cflags 关键字的值

CMAKE_PKG_CONFIG_INCLUDES

列表

来自 CMAKE_PKG_CONFIG_CFLAGS 的所有以 -I 为前缀的标志

CMAKE_PKG_CONFIG_COMPILE_OPTIONS

列表

来自 CMAKE_PKG_CONFIG_CFLAGS 的所有不是以 -I 为前缀的标志

CMAKE_PKG_CONFIG_LIBS

字符串

Libs 关键字的值

CMAKE_PKG_CONFIG_LIBDIRS

列表

来自 CMAKE_PKG_CONFIG_LIBS 的所有以 -L 为前缀的标志

CMAKE_PKG_CONFIG_LIBNAMES

列表

来自 CMAKE_PKG_CONFIG_LIBS 的所有以 -l 为前缀的标志

CMAKE_PKG_CONFIG_LINK_OPTIONS

列表

来自 CMAKE_PKG_CONFIG_LIBS 的所有不是以 -L-l 为前缀的标志

CMAKE_PKG_CONFIG_*_PRIVATE

*

CFLAGS / LIBS / REQUIRES 及其衍生形式,但属于 .private 后缀

SYSTEM_INCLUDE_DIRS

重载“系统”目录,以便 flag 混编库中包含的目录 CMAKE_PKG_CONFIG_CFLAGS 及其衍生变量。

如果未提供此选项,则默认目录由以下第一个有效值提供

  1. CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS

  2. PKG_CONFIG_SYSTEM_INCLUDE_PATH 环境变量

  3. 输出 pkgconf --variable pc_system_includedirs pkg-config

  4. 与平台相关的默认值

此外,当 ENV_MODEPKGCONFCMAKE_PKG_CONFIG_PKGCONF_INCLUDES 变量将被连接到列表中(如果存在)。如果不存在,则将查询并连接以下环境变量

  • CPATH

  • C_INCLUDE_PATH

  • CPLUS_INCLUDE_PATH

  • OBJC_INCLUDE_PATH

  • INCLUDE(仅限 Windows)

SYSTEM_LIBRARY_DIRS

重载“系统”目录,以便 flag 混编库中包含的目录 CMAKE_PKG_CONFIG_LIBS 及其衍生变量。

如果未提供此选项,则默认目录由以下第一个有效值提供

  1. CMAKE_PKG_CONFIG_SYS_LIB_DIRS

  2. PKG_CONFIG_SYSTEM_LIBRARY_PATH 环境变量

  3. 输出 pkgconf --variable pc_system_libdirs pkg-config

  4. 与平台相关的默认值

此外,当 ENV_MODEPKGCONFCMAKE_PKG_CONFIG_PKGCONF_LIB_DIRS 变量将被连接到列表中(如果存在)。如果不存在,则将查询并连接 LIBRARY_PATH 环境变量。

ALLOW_SYSTEM_INCLUDES

在 flag 搅乱包含目录中保留 CMAKE_PKG_CONFIG_CFLAGS 及其衍生变量中的“系统”目录。

如果未提供此选项,则默认值由以下第一个有效值确定

  1. CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES

  2. 如果定义了 PKG_CONFIG_ALLOW_SYSTEM_CFLAGS 环境变量,则会保留这些标志,否则在 flag 搅乱期间会对其进行筛选。

ALLOW_SYSTEM_LIBS

在 flag 搅乱包含目录中保留 CMAKE_PKG_CONFIG_LIBS 及其衍生变量中的“系统”目录。

如果未提供此选项,则默认值由以下第一个有效值确定

  1. CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS

  2. 如果定义了 PKG_CONFIG_ALLOW_SYSTEM_LIBS 环境变量,则会保留这些标志,否则在 flag 搅乱期间会对其进行筛选。