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.orgpkg-config
实现使用的PKG_CONFIG_*
环境变量的原始集。PKGCONF
: 查询pkgconf
实现使用的更广泛的环境变量集。IGNORE
: 完全忽略环境变量的存在、不存在和值。在所有情况下,都会将查询的环境变量视为定义好的,但为了操作的目的,值为空字符串。这不会修改当前环境。对于布尔环境变量(如PKG_CONFIG_ALLOW_*
),这意味着它们被评估为真。PKG_CONFIG_SYSROOT_PATH
是一个轻微的例外。当ENV_MODE IGNORE
时,默认不会发生根路径前置,且pc_sysrootdir
仍然默认为/
。
目标生成子命令总是忽略标志过滤环境变量。默认环境模式是
PKGCONF
。PC_LIBDIR <path>...
覆盖软件包文件的默认搜索位置;还用于派生
pc_path
软件包变量。如果未提供此选项,则默认库目录是下列值中第一个可用的值
CMAKE_PKG_CONFIG_PC_LIB_DIRS
环境变量
PKG_CONFIG_LIBDIR
pkg-config --variable pc_path pkg-config
的输出与平台相关的默认值
PC_PATH <path>...
覆盖将前置到搜索路径的补充软件包文件目录;还用于派生
pc_path
软件包变量。如果未提供此选项,则默认路径是下列值中第一个可用的值
CMAKE_PKG_CONFIG_PC_PATH
环境变量
PKG_CONFIG_PATH
空列表
DISABLE_UNINSTALLED <bool>
覆盖“未安装”软件包文件的搜索行为。这些软件包文件具有“-uninstalled”后缀,描述了直接从生成树集成的软件包。
通常,此类软件包文件比“已安装”软件包的优先级更高。当
DISABLE_UNINSTALLED
为 True 时,搜索“已卸载”软件包将被禁用。如果未提供此选项,则默认搜索行为由下列值中第一个可用的值确定
CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED
如果定义了环境变量
PKG_CONFIG_DISABLE_UNINSTALLED
,则禁用搜索,否则启用搜索。
PC_SYSROOT_DIR <path>
重写前缀路径,这个路径将前置到
-I
编译标志和-L
库搜索位置中,并用于导出pc_sysrootdir
包变量。如果没有提供此选项,那么默认的根路径由以下值的第一个可用值提供。
CMAKE_PKG_CONFIG_SYSROOT_DIR
PKG_CONFIG_SYSROOT_DIR
环境变量如果没有提供根路径,那么 include 或库目录路径将不会被前置任何内容,并且
pc_sysrootdir
将被设置为/
TOP_BUILD_DIR <path>
重写用于导出
pc_top_builddir
包变量的顶部构建目录路径。如果没有提供此选项,那么默认的顶部构建目录路径由以下值的第一个可用值提供。
CMAKE_PKG_CONFIG_TOP_BUILD_DIR
PKG_CONFIG_TOP_BUILD_DIR
环境变量如果没有提供顶部构建目录路径,那么将不会设置
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>])
以下变量将从包文件的内容中填充。
变量 |
类型 |
定义 |
---|---|---|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
列表 |
|
|
列表 |
|
|
列表 |
|
|
字符串 |
|
|
列表 |
来自 |
|
列表 |
来自 |
|
字符串 |
|
|
列表 |
来自 |
|
列表 |
来自 |
|
列表 |
来自 |
|
* |
|
SYSTEM_INCLUDE_DIRS
重载“系统”目录,以便 flag 混编库中包含的目录
CMAKE_PKG_CONFIG_CFLAGS
及其衍生变量。如果未提供此选项,则默认目录由以下第一个有效值提供
CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS
PKG_CONFIG_SYSTEM_INCLUDE_PATH
环境变量输出
pkgconf --variable pc_system_includedirs pkg-config
与平台相关的默认值
此外,当
ENV_MODE
为PKGCONF
,CMAKE_PKG_CONFIG_PKGCONF_INCLUDES
变量将被连接到列表中(如果存在)。如果不存在,则将查询并连接以下环境变量CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
INCLUDE
(仅限 Windows)
SYSTEM_LIBRARY_DIRS
重载“系统”目录,以便 flag 混编库中包含的目录
CMAKE_PKG_CONFIG_LIBS
及其衍生变量。如果未提供此选项,则默认目录由以下第一个有效值提供
CMAKE_PKG_CONFIG_SYS_LIB_DIRS
PKG_CONFIG_SYSTEM_LIBRARY_PATH
环境变量输出
pkgconf --variable pc_system_libdirs pkg-config
与平台相关的默认值
此外,当
ENV_MODE
为PKGCONF
,CMAKE_PKG_CONFIG_PKGCONF_LIB_DIRS
变量将被连接到列表中(如果存在)。如果不存在,则将查询并连接LIBRARY_PATH
环境变量。ALLOW_SYSTEM_INCLUDES
在 flag 搅乱包含目录中保留
CMAKE_PKG_CONFIG_CFLAGS
及其衍生变量中的“系统”目录。如果未提供此选项,则默认值由以下第一个有效值确定
CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES
如果定义了
PKG_CONFIG_ALLOW_SYSTEM_CFLAGS
环境变量,则会保留这些标志,否则在 flag 搅乱期间会对其进行筛选。
ALLOW_SYSTEM_LIBS
在 flag 搅乱包含目录中保留
CMAKE_PKG_CONFIG_LIBS
及其衍生变量中的“系统”目录。如果未提供此选项,则默认值由以下第一个有效值确定
CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS
如果定义了
PKG_CONFIG_ALLOW_SYSTEM_LIBS
环境变量,则会保留这些标志,否则在 flag 搅乱期间会对其进行筛选。