WINDOWS_EXPORT_ALL_SYMBOLS

在版本 3.4 中加入。

此屬性僅針對 Windows 上與 MS 相容的工具實作。

啟用此布林屬性,以自動為 SHARED 程式庫(或具有 ENABLE_EXPORTS 的可執行檔)在 Windows 上,使用輸入 .obj 檔中找到的所有全域符號建立模組定義 (module definition) 檔案 (.def)。模組定義檔案將會傳遞給連結器,導致所有符號從 .dll 匯出。

這簡化了將專案移植到 Windows 的過程,減少了對明確 dllexport 標記的需求,即使在 C++ 類別中也是如此。函式符號將會自動匯出,並且可以被呼叫者連結。然而,在某些情況下,消費者 (consumer) 編譯程式碼可能需要明確的 dllimport 標記。

  • 全域資料符號必須明確地使用 __declspec(dllimport) 標記,以便連結到 .dll 中的資料。

  • 在編譯器產生對虛擬函式表 (virtual function table) 的參考的情況下,例如在使用虛擬函式的類別的委派建構子 (delegating constructor) 中,整個類別都必須使用 __declspec(dllimport) 標記,以便連結到 .dll 中的 vftable。

  • 請參閱 MSVC 連結器 /EXPORT 選項 以取得關於資料符號的更多資訊。

當此屬性啟用時,也可以將零個或多個 .def 檔案指定為目標的來源檔案。這些檔案命名的匯出將與從物件檔案偵測到的匯出合併,以產生單一模組定義檔案,並傳遞給連結器。這可以用於從 .dll 匯出符號,這些符號不在其任何物件檔案中,而是由連結器從相依性 (dependencies) 中加入的(例如 msvcrt.lib)。

如果變數 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 在建立目標時已設定,則此屬性會由此變數的值初始化。