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_EXECUTABLEPKG_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_PATHCMAKE_FRAMEWORK_PATHCMAKE_APPBUNDLE_PATH 快取和環境變數將會加入 pkg-config 搜尋路徑。 NO_CMAKE_PATHNO_CMAKE_ENVIRONMENT_PATH 引數會分別停用快取變數和環境變數的此行為。設定為 FALSEPKG_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。只有在兩者都找到的情況下,才會認為找到 FOOFOO_glib-2.0_VERSIONFOO_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_PATHCMAKE_FRAMEWORK_PATHCMAKE_APPBUNDLE_PATH 快取和環境變數中的路徑新增到 pkg-config 搜尋路徑中。

如果未設定此變數,當 CMAKE_MINIMUM_REQUIRED_VERSION 為 3.1 或更新版本時,預設會啟用此行為,否則會停用。