export

導出目標或套件,供外部專案直接從目前專案的建置樹狀結構中使用,而無需安裝。

請參閱 install(EXPORT) 命令,以從安裝樹狀結構導出目標。

概要

export(TARGETS <target>... [...])
export(EXPORT <export-name> [...])
export(PACKAGE <PackageName>)
export(SETUP <export-name> [...])

導出目標

export(TARGETS <target>... [...])
export(TARGETS <target>... [NAMESPACE <namespace>]
       [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES]
       [CXX_MODULES_DIRECTORY <directory>])

建立一個 <filename> 檔案,外部專案可以包含該檔案,以從目前專案的建置樹狀結構匯入由 <target>... 命名的目標。這在交叉編譯期間很有用,可以在一個專案中建置可在主機平台上執行的實用工具執行檔,然後將它們匯入到另一個為目標平台編譯的專案中。

此命令建立的檔案特定於建置樹狀結構,絕不應安裝。請參閱 install(EXPORT) 命令,以從安裝樹狀結構導出目標。

選項如下

NAMESPACE <namespace>

<namespace> 字串前置到寫入檔案的所有目標名稱。

APPEND

附加到檔案而不是覆寫它。這可用於將多個目標逐步導出到同一個檔案。

EXPORT_LINK_INTERFACE_LIBRARIES

包含以模式 (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)? 命名的屬性的內容在導出中,即使策略 CMP0022 為 NEW。這對於支援使用舊於 2.8.12 的 CMake 版本的消費者很有用。

CXX_MODULES_DIRECTORY <directory>

在版本 3.28 中新增。

將 C++ 模組屬性導出到給定目錄下的檔案。每個檔案將根據目標的導出名稱(不帶任何命名空間)命名。這些檔案將自動從導出檔案中包含。

此簽名需要明確列出所有目標。如果導出中包含庫目標,但未包含它鏈接到的目標,則行為未指定。請參閱 export(EXPORT) 簽名,以自動從建置樹狀結構導出與 install(EXPORT) 從安裝樹狀結構導出的目標相同的目標。

注意

物件庫Xcode 下,如果 CMAKE_OSX_ARCHITECTURES 中列出了多個架構,則有特殊的處理方式。在這種情況下,它們將被導出為 介面庫,沒有物件檔案可供客戶端使用。這足以滿足鏈接到其實現中的物件庫的其他目標的傳遞使用要求。

此命令從建置樹狀結構導出所有 建置配置。請參閱 CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> 變數,以將相關專案的配置映射到導出的配置。

導出目標到 Android.mk

export(TARGETS <target>... ANDROID_MK <filename>)

在版本 3.7 中新增。

此簽名通過建立引用預建目標的 Android.mk 檔案,將 cmake 建置的目標導出到 android ndk 建置系統。Android NDK 支援使用預建庫,包括靜態庫和共享庫。這允許 cmake 建置專案的庫,並使它們可供 ndk 建置系統使用,並具有使用這些庫所需的傳遞依賴項、包含標誌和定義。此簽名接受目標列表,並將它們放在給定的 <filename> 指定的 Android.mk 檔案中。只有在所有給定目標的策略 CMP0022 為 NEW 時,才能使用此簽名。如果其中一個目標的策略設定為 OLD,則會發出錯誤。

導出與 install(EXPORT) 匹配的目標

export(EXPORT <export-name> [...])
export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>]
       [CXX_MODULES_DIRECTORY <directory>] [EXPORT_PACKAGE_DEPENDENCIES])

建立一個 <filename> 檔案,外部專案可以包含該檔案,以從目前專案的建置樹狀結構匯入目標。這與 export(TARGETS) 簽名相同,只是目標未明確列出。相反,它導出與安裝導出 <export-name> 關聯的目標。可以使用 install(TARGETS) 命令的 EXPORT 選項將目標安裝與導出 <export-name> 關聯。

EXPORT_PACKAGE_DEPENDENCIES

注意

實驗性。由 CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_DEPENDENCIES 閘控。

指定應導出 find_dependency() 呼叫。請參閱 install(EXPORT) 以了解有關其工作原理的詳細資訊。

導出套件

export(PACKAGE <PackageName>)
export(PACKAGE <PackageName>)

將目前的建置目錄儲存在 CMake 使用者套件註冊表中,用於套件 <PackageName>find_package() 命令可能會在搜尋套件 <PackageName> 時考慮該目錄。這有助於相依專案從目前專案的建置樹狀結構中尋找和使用套件,而無需使用者的幫助。請注意,此命令在套件註冊表中建立的條目僅與適用於建置樹狀結構的套件組態檔案 (<PackageName>Config.cmake) 結合使用時才有效。在某些情況下,例如對於封裝和系統範圍的安裝,不希望寫入使用者套件註冊表。

Changed in version 3.1: 如果啟用 CMAKE_EXPORT_NO_PACKAGE_REGISTRY 變數,則 export(PACKAGE) 命令將不執行任何操作。

Changed in version 3.15: 預設情況下,export(PACKAGE) 命令不執行任何操作(請參閱策略 CMP0090),因為填寫使用者套件註冊表會對來源和建置樹狀結構之外產生影響。設定 CMAKE_EXPORT_PACKAGE_REGISTRY 變數以將建置目錄新增至 CMake 使用者套件註冊表。

配置導出

export(SETUP <export-name> [...])
export(SETUP <export-name>
       [PACKAGE_DEPENDENCY <dep>
        [ENABLED (<bool-true>|<bool-false>|AUTO)]
        [EXTRA_ARGS <args>...]
       ] [...]
       [TARGET <target>
        [XCFRAMEWORK_LOCATION <location>]
       ] [...]
       )

在版本 3.29 中新增。

配置導出的參數。參數如下

PACKAGE_DEPENDENCY <dep>

注意

實驗性。由 CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_DEPENDENCIES 閘控。

指定要配置的套件依賴項。這會變更在 export(EXPORT)install(EXPORT) 期間寫入 find_dependency() 呼叫的方式。<dep> 是要導出的套件的名稱。此參數接受以下附加參數

ENABLED

手動控制是否導出依賴項。這接受以下值

<bool-true>

CMake 識別為「true」的任何值。始終導出依賴項,即使沒有導出的目標依賴於它。這可以用於手動將 find_dependency() 呼叫新增至導出。

<bool-false>

CMake 識別為「false」的任何值。永遠不要導出依賴項,即使導出的目標依賴於它。

AUTO

僅在導出的目標依賴於它時才導出依賴項。

EXTRA_ARGS <args>

REQUIRED 參數之後,指定要傳遞給 find_dependency() 的其他參數。

TARGET <target>

指定要在此導出中配置的目標。此參數接受以下附加參數

XCFRAMEWORK_LOCATION

指定包含來自此目標的庫的 .xcframework 的位置。如果指定,則產生的程式碼將檢查 .xcframework 是否存在,如果存在,它將使用 .xcframework 作為其匯入位置,而不是已安裝的庫。