cmake_pkg_config¶
在版本 3.31 中新增。
處理 pkg-config 格式的套件檔案。
概要¶
cmake_pkg_config(EXTRACT <package> [<version>] [...])
簡介¶
此命令會從 pkg-config 格式的套件檔案原生產生 CMake 變數和目標,而無需調用甚至不需要 pkg-config 實作的存在。<package>
要嘛是套件檔案的絕對路徑,要嘛是使用典型的 pkg-config 搜尋模式搜尋的套件名稱。 選用的 <version>
字串具有與 pkg-config 樣式的版本指定符相同的格式和語意,但如果未指定比較運算子,則假設為 =
。
此命令有多個簽名,其中一些選項在它們之間是通用的。它們是
EXACT
/QUIET
/REQUIRED
EXACT
選項要求精確比對版本字串(包括空字串,如果未提供版本),覆寫典型的 pkg-config 版本比較演算法。這將忽略附加到版本字串的任何比較運算子。QUIET
選項會停用訊息通知,包括在找不到套件時(如果不是REQUIRED
)。如果找不到套件,則REQUIRED
選項會停止處理並顯示錯誤訊息。STRICTNESS <mode>
指定在剖析和解析期間,將如何嚴格驗證套件檔案的內容。在提供的嚴格模式下,無效的檔案將導致命令失敗。可能的模式為
STRICT
: 密切反映原始 FDO pkg-config 的行為。變數和關鍵字必須是唯一的。變數必須在使用前定義。必須存在 Name、Description 和 Version 關鍵字。檔案的整體結構必須有效且可剖析。PERMISSIVE
: 密切反映 pkgconf 實作的行為。重複的變數會被覆寫。重複的關鍵字會附加。未定義的變數會解析為空字串。必須存在 Name、Description 和 Version 關鍵字。檔案的整體結構必須有效且可剖析。BEST_EFFORT
: 在重複或未初始化的變數和關鍵字方面與PERMISSIVE
具有相同的行為,但在任何情況下都不會失敗。需要 BEST_EFFORT 的套件檔案在所有其他主要實作下都會驗證失敗,因此應該修正。
預設的嚴格性為
PERMISSIVE
。ENV_MODE
指定執行給定命令時將查詢哪些環境變數。可能的模式為
FDO
: 只查詢 freedesktop.orgpkg-config
實作所使用的原始PKG_CONFIG_*
環境變數集。PKGCONF
: 查詢pkgconf
實作所使用的更廣泛的環境變數集。IGNORE
: 完全忽略環境變數的存在、缺席和值。在所有情況下,都會將查詢的環境變數視為已定義,但為了運算目的,其值為空字串。這不會修改目前的環境。對於布林環境變數(例如PKG_CONFIG_ALLOW_*
),這表示它們會被評估為真值。PKG_CONFIG_SYSROOT_PATH
是一個小例外。使用ENV_MODE IGNORE
時,預設不會發生根路徑前置,而且pc_sysrootdir
仍然預設為/
。
目標產生子命令總是會忽略旗標篩選環境變數。預設環境模式為
PKGCONF
。PC_LIBDIR <path>...
覆寫套件檔案的預設搜尋位置;也用於衍生
pc_path
套件變數。未提供此選項時,預設程式庫目錄是下列值中的第一個可用值
CMAKE_PKG_CONFIG_PC_LIB_DIRS
PKG_CONFIG_LIBDIR
環境變數pkg-config --variable pc_path pkg-config
的輸出與平台相關的預設值
PC_PATH <path>...
覆寫將前置到搜尋路徑的補充套件檔案目錄;也用於衍生
pc_path
套件變數。未提供此選項時,預設路徑是下列值中的第一個可用值
CMAKE_PKG_CONFIG_PC_PATH
PKG_CONFIG_PATH
環境變數空清單
DISABLE_UNINSTALLED <bool>
覆寫「未安裝」套件檔案的搜尋行為。這些是具有「-uninstalled」後綴的套件檔案,用於描述直接從建置樹狀結構整合的套件。
通常,這類套件檔案的優先順序高於「已安裝」套件。當
DISABLE_UNINSTALLED
為 true 時,會停用搜尋「未安裝」套件。未提供此選項時,預設搜尋行為由下列值中的第一個可用值決定
CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED
如果定義了
PKG_CONFIG_DISABLE_UNINSTALLED
環境變數,則會停用搜尋,否則會啟用搜尋。
PC_SYSROOT_DIR <path>
覆寫根路徑,該根路徑將前置到
-I
編譯旗標和-L
程式庫搜尋位置指定的路徑;也用於衍生pc_sysrootdir
套件變數。未提供此選項時,預設根路徑由下列值中的第一個可用值提供
CMAKE_PKG_CONFIG_SYSROOT_DIR
PKG_CONFIG_SYSROOT_DIR
環境變數如果沒有可用的根路徑,則不會將任何內容前置到包含或程式庫目錄路徑,而且
pc_sysrootdir
將設定為/
TOP_BUILD_DIR <path>
覆寫用於衍生
pc_top_builddir
套件變數的頂層建置目錄路徑。未提供此選項時,預設頂層建置目錄路徑是下列值中的第一個可用值
CMAKE_PKG_CONFIG_TOP_BUILD_DIR
PKG_CONFIG_TOP_BUILD_DIR
環境變數如果沒有可用的頂層建置目錄路徑,則不會設定
pc_top_builddir
套件變數
簽名¶
- cmake_pkg_config(EXTRACT <package> [<version>] [...])¶
將套件的內容擷取到變數中。
cmake_pkg_config(EXTRACT <package> [<version>] [REQUIRED] [EXACT] [QUIET] [STRICTNESS <mode>] [ENV_MODE <mode>] [PC_LIBDIR <path>...] [PC_PATH <path>...] [DISABLE_UNINSTALLED <bool>] [PC_SYSROOT_DIR <path>] [TOP_BUILD_DIR <path>] [SYSTEM_INCLUDE_DIRS <path>...] [SYSTEM_LIBRARY_DIRS <path>...] [ALLOW_SYSTEM_INCLUDES <bool>] [ALLOW_SYSTEM_LIBS <bool>])
將從套件檔案的內容填入下列變數
變數 |
類型 |
定義 |
---|---|---|
|
字串 |
|
|
字串 |
|
|
字串 |
|
|
清單 |
|
|
清單 |
|
|
清單 |
|
|
字串 |
|
|
清單 |
所有 |
|
清單 |
所有來自 |
|
字串 |
|
|
清單 |
所有來自 |
|
清單 |
所有來自 |
|
清單 |
所有未加上 |
|
* |
|
SYSTEM_INCLUDE_DIRS
覆寫「系統」目錄,用於在
CMAKE_PKG_CONFIG_CFLAGS
和衍生變數中處理 include 目錄的旗標。如果未提供此選項,則預設目錄由以下值中第一個可用的值提供:
CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS
PKG_CONFIG_SYSTEM_INCLUDE_PATH
環境變數pkgconf --variable pc_system_includedirs pkg-config
的輸出與平台相關的預設值
此外,當
ENV_MODE
為PKGCONF
時,如果CMAKE_PKG_CONFIG_PKGCONF_INCLUDES
變數可用,則會將其串連到清單中。如果不可用,則將查詢並串連以下環境變數:CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
INCLUDE
(僅限 Windows)
SYSTEM_LIBRARY_DIRS
覆寫「系統」目錄,用於在
CMAKE_PKG_CONFIG_LIBS
和衍生變數中處理函式庫目錄的旗標。如果未提供此選項,則預設目錄由以下值中第一個可用的值提供:
CMAKE_PKG_CONFIG_SYS_LIB_DIRS
PKG_CONFIG_SYSTEM_LIBRARY_PATH
環境變數pkgconf --variable pc_system_libdirs pkg-config
的輸出與平台相關的預設值
此外,當
ENV_MODE
為PKGCONF
時,如果CMAKE_PKG_CONFIG_PKGCONF_LIB_DIRS
變數可用,則會將其串連到清單中。如果不可用,則將查詢並串連LIBRARY_PATH
環境變數。ALLOW_SYSTEM_INCLUDES
在
CMAKE_PKG_CONFIG_CFLAGS
和衍生變數中處理 include 目錄的旗標時,保留「系統」目錄。如果未提供此選項,則預設值由以下值中第一個可用的值決定:
CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES
如果定義了
PKG_CONFIG_ALLOW_SYSTEM_CFLAGS
環境變數,則保留旗標,否則在處理旗標期間會被過濾掉。
ALLOW_SYSTEM_LIBS
在
CMAKE_PKG_CONFIG_LIBS
和衍生變數中處理函式庫目錄的旗標時,保留「系統」目錄。如果未提供此選項,則預設值由以下值中第一個可用的值決定:
CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS
如果定義了
PKG_CONFIG_ALLOW_SYSTEM_LIBS
環境變數,則保留旗標,否則在處理旗標期間會被過濾掉。