CMake 3.9 發行說明

自 CMake 3.8 以來所做的變更包括以下內容。

新功能

語言

  • CUDA 現在受到適用於 VS 2010 及更高版本的 Visual Studio 產生器 的支援。這 дополняет Makefile 產生器Ninja 產生器現有的支援。建議使用 CUDA 8.0.61 或更高版本,因為早期版本在 VS 整合中存在已知錯誤。

  • CMake 現在已了解以下 編譯器 IDC++ 標準C 標準 及其相關的中繼功能:CrayPGIXL

產生器

命令

變數

屬性

模組

  • 新增了 CheckIPOSupported 模組,以協助專案檢查目前的工具鏈和 CMake 版本是否支援程序間最佳化 (IPO)。

  • CMakeFindDependencyMacro 模組 find_dependency 巨集現在將所有引數轉發到基礎的 find_package() 呼叫。現有的用法將繼續像以前一樣運作,但呼叫者現在可以存取 find_package() 接受的全套引數。

  • FeatureSummary 模組 feature_summary() 命令現在接受新的 DEFAULT_DESCRIPTION 選項,該選項將列印所選套件類型的預設標題。

  • FeatureSummary 模組獲得了新的 FeatureSummary_<TYPE>_DESCRIPTION 變數,可以為每個 <TYPE> 定義該變數,以便在模組的輸出字串中使用套件類型時,將類型名稱替換為指定的字串。

  • FindDoxygen 模組學習使用 CMake 變數控制 Doxygen 行為,並透過新加入的 doxygen_add_docs() 函數產生文件。Doxygen 輸入檔 (Doxyfile) 會自動產生,而 doxygen 會作為自訂目標的一部分執行。可以指定其他組件來尋找選用工具:dotmscgendia

  • FindMPI 模組現在提供匯入目標。

  • FindProtobuf 模組 protobuf_generate_cpp() 命令獲得了 EXPORT_MACRO 選項,以指定 DLL 匯出標記巨集的名稱。

  • FindProtobuf 模組現在透過新的 Protobuf_USE_STATIC_LIBS 輸入變數,支援在 Unix 上使用靜態程式庫。

  • FindProtobuf 模組現在在找到程式庫時提供匯入目標。

  • 新增了 GoogleTest 模組,以獨立於 FindGTest 模組提供 gtest_add_tests() 函數。該函數也已更新以支援關鍵字引數,其功能已擴展為允許指定測試名稱前綴和後綴、使原始檔的相依性成為選用項,以及將探索到的測試案例清單傳回給呼叫者。

CTest

  • ctest_submit() 命令獲得了 HTTPHEADER 選項,以指定在提交期間要傳送的自訂標頭。

  • ctest(1) 可執行檔獲得了新的選項,這些選項允許開發人員停用自動將測試新增到測試集中以滿足 fixture 相依性。-FS 阻止為符合所提供正規表示式的 fixture 新增設定測試,-FC 阻止為符合的 fixture 新增清理測試,而 -FA 阻止為符合的 fixture 新增任何測試。

  • 新增了 DISABLED 測試屬性,以標記已設定但明確停用的測試,以便它們不會執行。

CPack

其他

已棄用和移除的功能

  • 為策略 CMP0036 及更低版本新增了明確的棄用診斷。 cmake-policies(7) 手冊說明,所有策略的舊有行為都已棄用,專案應盡快移植到新的行為。

  • Visual Studio 8 2005 產生器現在已棄用,並將在未來版本的 CMake 中移除。

  • Visual Studio 7 .NET 2003 產生器已被移除。

  • Xcode 產生器已停止支援低於 3 的 Xcode 版本。

  • FindDoxygen 模組已棄用幾個變數。

  • 與 CMake 捆綁的 curl 版本不再接受 file://c:/... 形式的 URL(在 Windows 上),因為上游 curl 7.52 中發生了變更。請改用 file:///c:/... 形式,以便在所有版本上運作。

其他變更

  • 當使用 AUTOMOC 時,CMake 現在會掃描 Q_PLUGIN_METADATA 巨集的存在,並在巨集 FILE 引數中的檔案變更時重新執行 moc。

  • AUTOMOC 偵測到 #include "moc_<basename>.cpp" 形式的 include 陳述式時,對應標頭檔的搜尋現在也會在目標的 INCLUDE_DIRECTORIES 中進行。

  • 執行測試時,CTest 學會將略過的測試(使用 SKIP_RETURN_CODE 屬性)與具有新 DISABLED 屬性的測試視為相同。由於此變更,當所有測試都略過或通過時,CTest 將不會指示失敗。

  • Ninja 產生器已放寬物件編譯的依賴性。物件編譯現在僅依賴於與物件目標所依賴的程式庫相關聯的自訂目標和自訂命令,而不再依賴於程式庫本身。相依目標中的原始檔現在可以進行編譯,而無需等待其目標的依賴項連結。

  • 在 macOS 上,RPATH 設定(例如 BUILD_WITH_INSTALL_RPATH)不再影響 install_name 欄位。請參閱策略 CMP0068

  • Visual Studio 14 2015 產生器已被告知 VS 2015 更新對 v140 工具組所做的變更。VS 變更了它理解的 GenerateDebugInformation 連結器設定值集,該設定產生 -DEBUG 連結器旗標變體。

更新

自 CMake 3.9.0 以來所做的變更包括以下內容。

3.9.1

  • CMake 3.9.0 新增的 find_ 命令 PACKAGE_ROOT 搜尋路徑群組已從 3.9 系列中移除,因為使用新的 <PackageName>_ROOT 變數導致了回歸。此行為可能會在未來以更相容的方式重新引入。

3.9.2

  • 在 macOS 上,預設應用程式 bundle Info.plist 檔案不再像 3.9.0 和 3.9.1 中那樣啟用 Hi-DPI 支援。此變更必須還原,因為它破壞了 iOS 應用程式。

  • Xcode 產生器不再像 3.9.0 和 3.9.1 中那樣將 "outputPaths" 新增至自訂腳本建置階段。新增此功能是為了嘗試支援 Xcode 9 的新建置系統,但破壞了舊版和新版 Xcode 建置系統的增量重建。