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找到的 pkg-config 版本。
PKG_CONFIG_EXECUTABLEpkg-config 程序的路径。
PKG_CONFIG_ARGN3.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.3 版本新增:
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.7 版本新增:
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>),另一组用于pkg-config在使用--static选项调用时提供的信息(<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返回的关联变量具有多个值,则可能是一个 分号列表。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模块库目录
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)
查找 glib2 的至少 2.10 版本。如果找到,输出变量
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 或更高版本,则默认启用此行为;否则禁用。