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.3 新增: CMAKE_PREFIX_PATHCMAKE_FRAMEWORK_PATHCMAKE_APPBUNDLE_PATH 快取和環境變數將會新增至 pkg-config 搜尋路徑。 NO_CMAKE_PATHNO_CMAKE_ENVIRONMENT_PATH 引數分別停用快取變數和環境變數的此行為。 設定為 FALSEPKG_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_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 或更高版本,則預設啟用此行為,否則停用。