CMake 3.3 發行說明

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

新功能

產生器

  • Makefile 產生器現在會在包含磁碟上檔案的實際建置規則的 makefile 中加入 .DELETE_ON_ERROR。這會告訴 GNU make 在其配方修改輸出但失敗時,移除規則輸出。

  • Visual Studio 產生器學會支援 .xaml 原始檔,並將它們與對應的 .h.cpp 原始檔自動關聯。

  • 在 Windows 上新增了一個新的實驗性 Green Hills MULTI 產生器。Green Hills MULTI 是適用於嵌入式即時系統的 IDE。

指令

變數

屬性

模組

  • 引入 CheckFortranCompilerFlag 模組以檢查 Fortran 編譯器旗標,就像 CheckCCompilerFlag 模組已針對 C 所執行的操作一樣。

  • ExternalData 模組學會一個新的 ExternalData_NO_SYMLINKS 選項,以停用使用符號連結來填入實際資料檔案,改為使用複本。

  • ExternalData 模組學會 DATA{} 參考中的新 RECURSE: 選項,指定目錄。這允許比對整個相關檔案的目錄樹。

  • ExternalData 模組學會一個新的 URL 範本預留位置 %(algo:<key>),以允許透過設定新的 ExternalData_URL_ALGO_<algo>_<key> 變數,從演算法名稱自訂對應至 URL 元件。這允許更彈性的遠端 URL。

  • ExternalProject 模組學會在每個步驟的 BYPRODUCTS 中取代類似 <BINARY_DIR> 的權杖。

  • 當使用 LOG_* 選項以及在 CMake 初始快取選項中時,ExternalProject 模組 API 學會了支援 generator expressions

  • FindBoost 模組現在會針對 RELEASE 和 DEBUG 組態分別追蹤包含函式庫的目錄。

  • FindCUDA 模組現在預設會使用靜態 CUDA 執行階段函式庫(如果有的話)。提供了一個新的 CUDA_USE_STATIC_CUDA_RUNTIME 選項來控制此行為。

  • FindMatlab 模組已完全重寫。它學會了關於版本和元件,並且以更精確和跨平台的方式找到 Matlab。該模組現在提供了用於建立 mex 擴充功能、文件和單元測試的 API。

  • FindPackageHandleStandardArgs 模組的 FIND_PACKAGE_HANDLE_STANDARD_ARGS 函式現在總是會同時填入 <PackageName>_FOUND<UPPERCASE_NAME>_FOUND 變數(後者是為了向後相容)。現在會忽略 FOUND_VAR 選項,除非是為了強制執行其允許的值。

  • InstallRequiredSystemLibraries 模組學習了一個新的 CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT 選項來指定安裝元件。

生成器表達式

  • 引入了一個新的 COMPILE_LANGUAGE 生成器表達式,允許根據每個原始碼檔案的 LANGUAGE 來指定目標檔案的編譯選項。由於底層原生建置工具的限制,此功能在不同的生成器中具有不同的支援程度。請參閱 cmake-generator-expressions(7) 手冊以取得詳細資訊。

CTest

CPack

其他

  • 編譯功能 功能現在了解 Windows 上 GNU 編譯器(版本 4.4 到 5.0)所支援的功能。

  • cmake(1) -E tar 命令學習了一個新的 --format<format> 選項,以指定要寫入的封存格式。

  • 在 OS X 上,CMake 學會了建立 XCTest 捆綁包,以在 Xcode 內測試框架和應用程式捆綁包。FindXCTest 模組提供了方便的功能來處理 XCTEST 捆綁包。

已棄用和移除的功能

  • 在 OS X 上,cmake-gui(1) 不再有「Install For Command Line Use」選單項目。取而代之的是「How to Install For Command Line Use」選單項目,它會顯示一個資訊對話方塊,說明如何使命令列工具可用。例如:

    /Applications/CMake.app/Contents/bin/cmake-gui --install
    
  • ctest_build()build_command() 命令不再使用 -i 選項告訴 make 工具忽略錯誤。 之前,這只對 Makefile Generators 這麼做,但對其他產生器則否。請參閱政策 CMP0061

  • Visual Studio 10 2010 產生器不再檢查是否有正在執行且已開啟專案的 VS IDE,也不會要求它們重新載入。 最初,這麼做是為了 VS 10,因為 VS 7 到 9 都是如此,以避免提示解決方案中的每個專案。 由於 VS >= 10 允許一次重新載入整個解決方案,它們不需要 CMake 的協助。

  • Visual Studio 7 產生器 (.NET 2002) 現在已棄用,將在未來版本的 CMake 中移除。

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

  • find_package() 命令不再考慮在 cmake-gui(1) 中最近設定的專案建置樹。 之前僅在 Windows 上執行此操作,現在則永遠不執行。 如果給定 NO_CMAKE_BUILDS_PATH 選項,現在會忽略它,且實際上永遠開啟。專案可能會填入 使用者套件登錄,以協助使用者一個接一個地建置多個相依專案。

  • add_definitions() 命令不再導致填入 DEFINITIONS 目錄屬性。請參閱政策 CMP0059

  • 對於 Visual Studio 7、8 和 9 產生器,$(OutDir) 佔位符號的值不再評估為組態名稱。專案應改用 $(ConfigurationName)

  • 不再允許使用 export() 的輸出與 install(FILES) 命令一起使用。有關詳細資訊,請參閱政策 CMP0062

其他變更

  • Ninja 產生器現在要求呼叫 add_custom_command()add_custom_target() 命令時,必須使用 BYPRODUCTS 選項來明確指定自訂命令產生的任何檔案,這些檔案未列為輸出 (可能是因為允許它們的時間戳記比輸入舊)。請參閱政策 CMP0058

  • 已改進 Makefile 產生器的建置時進度輸出。它不再在平行建置期間混合進度和建置規則訊息。連結規則訊息現在具有進度,並顯示為粗體綠色而不是粗體紅色 (因為紅色通常與錯誤訊息相關聯)。

  • 對於 Visual Studio 7、8 和 9,CMAKE_CFG_INTDIR 變數值現在是 $(ConfigurationName) 而不是 $(OutDir)。這應該不會影響變數的預期使用案例。

  • 如果連結到隱式連結器搜尋目錄中的完整路徑的程式庫檔案 (例如 /usr/lib/libfoo.a),不再要求連結器搜尋程式庫 (例如 -lfoo),現在會依完整路徑連結。請參閱政策 CMP0060