FindPkgConfig¶
用于 CMake 的 pkg-config
模块。
查找 pkg-config
可执行文件并添加 pkg_get_variable()
、pkg_check_modules()
和 pkg_search_module()
命令。还将设置以下变量
PKG_CONFIG_FOUND
如果找到 pkg-config 可执行文件,则为 True。
PKG_CONFIG_VERSION_STRING
在 2.8.8 版本中添加。
已找到的 pkg-config 的版本。
PKG_CONFIG_EXECUTABLE
pkg-config 程序的路径名。
PKG_CONFIG_ARGN
在 3.22 版本中添加。
传给 pkg-config 的参数列表。
虽然 PKG_CONFIG_EXECUTABLE
和 PKG_CONFIG_ARGN
都由模块初始化,但用户可以覆盖它们。请参见 影响行为的变量了解这些变量的初始化方式。
- pkg_check_modules¶
检查所有指定的模块,在调用范围内设置各种结果变量。
pkg_check_modules(<prefix> [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] [IMPORTED_TARGET [GLOBAL]] <moduleSpec> [<moduleSpec>...])
如果有
REQUIRED
参数,如果找不到模块,命令将失败并显示错误。如果有
QUIET
参数,将不打印状态消息。在 3.1 版本中添加: 缓存变量和环境变量
CMAKE_PREFIX_PATH
、CMAKE_FRAMEWORK_PATH
和CMAKE_APPBUNDLE_PATH
将添加到pkg-config
搜索路径中。参数NO_CMAKE_PATH
和NO_CMAKE_ENVIRONMENT_PATH
为缓存变量和环境变量分别禁用此行为。将变量PKG_CONFIG_USE_CMAKE_PREFIX_PATH
设置为FALSE
将在全局范围内禁用此行为。已在 3.6 版本中添加:
IMPORTED_TARGET
参数将会创建一个名为PkgConfig::<prefix>
的已导入目标,其可直接作为target_link_libraries()
的参数传入。已在 3.13 版本中添加:
GLOBAL
参数将使已导入的目标在全局范围内可用。已在 3.15 版本中添加: 由
pkg-config
报告的非库链接器选项已存储在INTERFACE_LINK_OPTIONS
目标属性中。已在 3.18 版本中更改: 使用
-isystem
指定的包含目录存储在INTERFACE_INCLUDE_DIRECTORIES
目标属性中。以前版本的 CMake 将其保留在INTERFACE_COMPILE_OPTIONS
属性中。每个
<moduleSpec>
可能为裸模块名称,也可能是带有版本约束的模块名称(支持运算符=
、<
、>
、<=
和>=
)。以下是具有各种约束的名为foo
的模块的一些示例foo
匹配任何版本。foo<2
仅匹配版本 2 之前的版本。foo>=3.1
匹配从 3.1 或更高版本的任何版本。foo=1.2.3
需要 foo 必须是 1.2.3 版本。
可在返回时设置以下变量。存在两组值:一组用于普通情况(
<XXX> = <prefix>
),另一组用于在使用--static
选项调用pkg-config
时提供的信息(<XXX> = <prefix>_STATIC
)。<XXX>_FOUND
如果模块存在,则设置为 1
<XXX>_LIBRARIES
仅包含库(不含 '-l')
<XXX>_LINK_LIBRARIES
包含库及其绝对路径
<XXX>_LIBRARY_DIRS
包含库的路径(不含 '-L')
<XXX>_LDFLAGS
包含所有必需的链接器标志
<XXX>_LDFLAGS_OTHER
包含所有其他链接器标志
<XXX>_INCLUDE_DIRS
包含预处理器标志 '-I'(不含 '-I')
<XXX>_CFLAGS
包含所有必需的 cflags
<XXX>_CFLAGS_OTHER
包含其他编译器标志
除了
<XXX>_FOUND
之外,如果pkg-config
返回的多变量具有多个值,则可能是 ;-list。3.18 版中的更改: 使用
-isystem
指定的包含目录存储在<XXX>_INCLUDE_DIRS
变量中。之前的 CMake 版本将它们保留在<XXX>_CFLAGS_OTHER
中。有一些特殊变量的前缀取决于给定
<moduleSpec>
的数量。当只有一个<moduleSpec>
时,<YYY>
只会是<prefix>
,但如果给定两个或更多<moduleSpec>
项,<YYY>
将是<prefix>_<moduleName>
。<YYY>_VERSION
模块版本
<YYY>_PREFIX
模块的前缀目录
<YYY>_INCLUDEDIR
模块的包含目录
<YYY>_LIBDIR
模块的 lib 目录
3.8 版中的更改: 对于任何给定的
<prefix>
,pkg_check_modules()
可以通过不同的参数多次调用。之前的 CMake 版本缓存并返回第一条成功的结果。3.16 版中的更改: 如果无法确定已找到库的完整路径,但链接器仍然可以看到,则将其作为
-l<name>
传递。之前的 CMake 版本在这种情况下失败。示例
pkg_check_modules (GLIB2 glib-2.0)
查找任意版本的 glib2。如果找到,输出变量
GLIB2_VERSION
将包含实际找到的版本。pkg_check_modules (GLIB2 glib-2.0>=2.10)
查找至少为 2.10 版本的 glib2。如果找到,输出变量
GLIB2_VERSION
将包含实际找到的版本。pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)
查找 glib2-2.0(至少为 2.10 版本)和任意版本的 gtk2+-2.0。只有在同时找到这两个库时才会将
FOO
视为已找到。FOO_glib-2.0_VERSION
和FOO_gtk+-2.0_VERSION
变量将分别设置到它们各自找到的模块版本。pkg_check_modules (XRENDER REQUIRED xrender)
需要任何版本的
xrender
。成功调用设置的示例输出变量XRENDER_LIBRARIES=Xrender;X11 XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp
- pkg_search_module¶
此命令的行为与
pkg_check_modules()
相同,只不过它不会检查所有指定的模块,而是仅搜索第一个成功匹配项。pkg_search_module(<prefix> [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] [IMPORTED_TARGET [GLOBAL]] <moduleSpec> [<moduleSpec>...])
在 3.16 版本中新增: 如果找到模块,那么
<prefix>_MODULE_NAME
变量将包含匹配模块的名称。如果您需要运行pkg_get_variable()
,便可以使用此变量。示例
pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
- pkg_get_variable¶
在 3.4 版本中新增。
检索 pkg-config 变量
varName
的值,并将结果存储在调用范围内的结果变量resultVar
中。pkg_get_variable(<resultVar> <moduleName> <varName> [DEFINE_VARIABLES <key>=<value>...])
如果
pkg-config
返回指定变量的多个值,则resultVar
将包含 ;- 列表。选项
DEFINE_VARIABLES <key>=<value>...
在 3.28 版本中新增。
指定键值对,重新定义影响使用
pkg-config
检索的变量的变量。
例如
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
影响行为的变量¶
- PKG_CONFIG_EXECUTABLE¶
此缓存变量可以设置为 pkg-config 可执行文件的路径。模块使用此变量在内部调用
find_program()
。在 3.1 版本中新增: 如果尚未设置
PKG_CONFIG_EXECUTABLE
,可以使用PKG_CONFIG
环境变量作为提示。在 3.22 版本中更改: 如果设置
PKG_CONFIG
环境变量,仅当将其用作提示时才从其中获取第一个参数。
- PKG_CONFIG_ARGN¶
在 3.22 版本中添加。
此缓存变量可以设置为参数列表,以便在需要时额外传递给 pkg-config。如果没有提供,则会从
PKG_CONFIG
环境变量(如果已设置)进行初始化。该环境变量中的第一个参数假定为 pkg-config 程序,而其后的所有剩余参数都用于初始化PKG_CONFIG_ARGN
。如果没有定义此类环境变量,则将PKG_CONFIG_ARGN
初始化为空字符串。一旦在缓存中设置变量,模块便不会更新它。
- PKG_CONFIG_USE_CMAKE_PREFIX_PATH¶
在 3.1 版本中新增。
指定
pkg_check_modules()
和pkg_search_module()
是否应将CMAKE_PREFIX_PATH
、CMAKE_FRAMEWORK_PATH
和CMAKE_APPBUNDLE_PATH
缓存和环境变量中的路径添加到pkg-config
搜索路径。如果未设置此变量,如果
CMAKE_MINIMUM_REQUIRED_VERSION
为 3.1 或更高版本,则默认启用此行为,否则禁用。