CMake 3.9 發行說明

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

新功能

程式語言

  • CUDA 現在受到 Visual Studio 產生器 對於 VS 2010 及更高版本的支援。這補充了現有的 Makefile 產生器Ninja 產生器的支援。建議使用 CUDA 8.0.61 或更高版本,因為早期版本在 VS 整合方面存在已知錯誤。

  • CMake 現在可以識別 C++ 標準C 標準 以及它們相關的後設功能,適用於以下 編譯器 IDCrayPGIXL

產生器

  • 適用於 VS 2010 及更高版本的 Visual Studio 產生器 學會了在安裝 nasm 時支援 ASM_NASM 程式語言。

  • Xcode 產生器學會了建立 Xcode 結構描述檔案。這是一項實驗性功能,可以將 CMAKE_XCODE_GENERATE_SCHEME 變數設定為 TRUE 值來啟用。

命令

變數

屬性

模組

  • 新增了 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) 手冊說明所有原則的 OLD 行為都已棄用,專案應儘快移植到 NEW 行為。

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

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

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

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

  • 由於上游 curl 7.52 的變更,CMake 捆綁的 curl 版本不再接受 Windows 上 file://c:/... 形式的 URL。請改用 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 上,諸如 BUILD_WITH_INSTALL_RPATH 之類的 RPATH 設定不再影響 install_name 欄位。請參閱政策 CMP0068

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

更新

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

3.9.1

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

3.9.2

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

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