查找PkgConfig¶
用于 CMake 的 pkg-config 模块。
查找 pkg-config 可执行文件并添加:command:pkg_get_variable、pkg_check_modules() 和 pkg_search_module() 命令。还将设置以下变量:
PKG_CONFIG_FOUND如果找到 pkg-config 可执行文件,则为真。
PKG_CONFIG_VERSION_STRING在 2.8.8 版本加入.
找到的 pkg-config 的版本。
PKG_CONFIG_EXECUTABLEpkg-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> = <前缀>_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所有必需的标志
<XXX>_CFLAGS_OTHER其他编译器标志
如果从
pkg-config返回的关联变量有多个值,则除了<XXX>_FOUND之外的所有都可能是 ;-list。在 3.18 版本发生变更: 使用“-isystem”指定的包含目录存储在“<XXX>_INCLUDE_DIRS”变量中。以前版本的 CMake 将它们留在了``<XXX>_CFLAGS_OTHER`` 中。
有一些特殊变量的前缀取决于给定的``<moduleSpec>``的数量。当只有一个
<moduleSpec>时,<YYY>将只是<prefix>,但是如果给出了两个或更多的<moduleSpec>项,< YYY>将是<prefix>_<moduleName>。<YYY>_VERSION模块的版本
<YYY>_PREFIX模块前缀目录
<YYY>_INCLUDEDIRinclude 模块目录
<YYY>_LIBDIR模块的lib目录
在 3.8 版本发生变更: 对于任何给定的
<prefix>,pkg_check_modules()可以使用不同的参数多次调用。以前版本的 CMake 会缓存并返回第一个成功的结果。在 3.16 版本发生变更: 如果无法确定找到的库的完整路径,但它仍然对链接器可见,请将其作为“-l<名称>”传递。在这种情况下,以前版本的 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>)
如果
pkg-config为指定变量返回多个值,resultVar将包含一个 ;-list。例如:
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 或更高版本,则默认情况下启用此行为,否则禁用。