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
引數會分別停用快取變數和環境變數的此行為。設定為FALSE
的PKG_CONFIG_USE_CMAKE_PREFIX_PATH
變數會全域停用此行為。在版本 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
將會包含 ;-list。選項
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 或更新版本時,預設會啟用此行為,否則會停用。