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.3 新增:
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.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
之外,所有項目都可能是 ;-list,如果從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)
尋找至少 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 或更高版本,則預設啟用此行為,否則停用。