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
在建立目標時已設定,則此屬性會由此變數的值初始化。