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)
從安裝樹匯出的相同目標。
注意
如果 CMAKE_OSX_ARCHITECTURES
中列出了多個架構,則在 Xcode
下的物件程式庫有特殊處理。在這種情況下,它們將匯出為介面程式庫,且沒有物件檔案可供客戶端使用。這足以滿足在其實現中連結到物件程式庫的其他目標的遞移使用需求。
此命令會從建置樹匯出所有建置組態。請參閱 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
) 搭配使用。在某些情況下,例如為了封裝和系統範圍安裝,不希望寫入使用者套件登錄。
在 3.1 版本中變更: 如果啟用 CMAKE_EXPORT_NO_PACKAGE_REGISTRY
變數,export(PACKAGE)
命令將不會執行任何動作。
在 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
控制。指定要設定的套件依賴。這會變更在
find_dependency()
呼叫於export(EXPORT)
和install(EXPORT)
期間的寫入方式。<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
作為其導入位置,而不是已安裝的庫。