ENABLE_EXPORTS

指定執行檔或共享函式庫是否匯出符號。

通常執行檔不會匯出任何符號,因為它是最終程式。執行檔有可能匯出符號,以供可載入模組使用。當此屬性設定為 true 時,CMake 將允許其他目標使用 target_link_libraries() 命令「連結」到執行檔。在所有平台上,會為連結到執行檔的目標建立目標層級的依賴關係。在可載入模組的連結行中處理執行檔的方式因平台而異

  • 在基於 Windows 的系統(包括 Cygwin)上,會建立一個「匯入函式庫」以及執行檔,以列出匯出的符號。可載入模組連結到匯入函式庫以取得符號。

  • 在 macOS 上,可載入模組使用 -bundle_loader 旗標連結到執行檔本身。

  • 在 AIX 上,會建立一個連結器「匯入檔案」以及執行檔,以列出匯出的符號,以便在連結其他目標時匯入。可載入模組連結到匯入檔案以取得符號。

  • 在其他平台上,可載入模組只需連結即可,無需參考執行檔,因為動態載入器會在模組載入時自動綁定符號。

此屬性由 CMAKE_EXECUTABLE_ENABLE_EXPORTS 變數的值初始化,如果它在建立執行檔目標時已設定。如果未設定 CMAKE_EXECUTABLE_ENABLE_EXPORTS,則會使用 CMAKE_ENABLE_EXPORTS 變數來初始化屬性,以實現向後相容性。有關共享函式庫目標的替代初始化行為,請參閱下文。

版本 3.27 新增: 為了在 macOS 上與共享函式庫連結,或在任何 Apple 平台上與共享框架連結,可以使用連結器匯入檔案來代替實際的共享函式庫。這些連結器匯入檔案也稱為基於文本的存根,它們具有 .tbd 副檔名。

這些連結器匯入檔案的生成以及它們的使用受此屬性控制。當在共享函式庫目標上將此屬性設定為 true 時,CMake 將為該函式庫生成一個 .tbd 檔案。然後,連結到共享函式庫目標的其他目標將在連結時使用此 .tbd 檔案,而不是連結到共享函式庫二進制檔。

注意

由於向後相容性原因,如果 XCODE_ATTRIBUTE_GENERATE_TEXT_BASED_STUBS 目標屬性或 CMAKE_XCODE_ATTRIBUTE_GENERATE_TEXT_BASED_STUBS 變數設定為 false,則此屬性將被忽略。

對於共享函式庫目標,此屬性由 CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS 變數的值初始化,如果它在建立目標時已設定。