CMake 3.3 版本發行說明

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

新功能

產生器

  • Makefile 產生器 現在將 .DELETE_ON_ERROR 新增至包含磁碟上檔案實際建置規則的 makefile。這會告知 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> 這樣的符號。

  • ExternalProject 模組 API 學習在使用 LOG_* 選項和 CMake 初始快取選項時,支援 產生器表達式

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

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

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

  • 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 內測試 Frameworks 和 App Bundles。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() 指令不再告知 make 工具使用 -i 選項忽略錯誤。先前,這是針對 Makefile 產生器 完成的,但其他產生器則否。請參閱政策 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