CMake 3.17 發行說明

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

新功能

產生器

程式語言

編譯器

  • 現在 Ninja 產生器支援 IBM XL Fortran 編譯器。

命令列

  • cmake(1) 獲得了 --debug-find 命令列選項,以在 find_* 命令搜尋位置上啟用額外的人類可讀輸出。

  • cmake(1) 獲得了 --trace-format 命令列選項,可用於設定 --trace 輸出格式。 目前,支援舊的人類可讀格式和新的 JSON 格式。 新的 JSON 格式比現有格式更易於自動解析。

  • cmake(1) 獲得了 -E rm 命令列工具,可用於移除目錄和檔案。 這取代了現有的 -E remove-E remove_directory 工具,並具有更好的語意。

命令

變數

屬性

模組

  • ExternalProject 模組 ExternalProject_Add() 命令獲得了 GIT_SUBMODULES_RECURSE 選項,以指定是否應遞迴更新 Git 子模組。 預設值為開啟,以保留現有行為。

  • 新增了 FindCUDAToolkit 模組,以在不啟用 CUDA 作為程式語言的情況下尋找 CUDA 工具包。

  • FindCURL 模組學會了使用 CURL 的 cmake 建構系統產生的 CURLConfig.cmake 套件設定檔來尋找 CURL。 它還獲得了一個新的 CURL_NO_CURL_CMAKE 選項,以停用此行為。

  • FindFLEX 模組的 FLEX_TARGET 命令現在使用 CMAKE_CURRENT_BINARY_DIR 作為工作目錄來執行 flex。 請參閱政策 CMP0098

  • FindLibArchive 模組現在為 libarchive 提供了一個匯入目標。

  • FindPython 模組已學會在由 conda 管理的活動虛擬環境中尋找 Python 組件。

  • FindPython3FindPython 模組分別獲得了變數 Python3_SOABIPython_SOABI,它們給出了模組的標準擴展名後綴。 此外,命令 Python3_add_library()Python_add_library() 獲得了選項 WITH_SOABI,以使用 SOABI 的值作為函式庫後綴的前綴。

  • FindLibXml2 模組現在為 xmllint 可執行檔提供了一個匯入目標。

自動產生

CTest

  • CTEST_CONFIGURATION_TYPE 變數現在在 ctest(1)-C <cfg> 一起調用時從命令列設定。

  • ctest(1) 工具獲得了對 Dr. Memory 的支援,以執行記憶體檢查執行。

  • ctest(1) 工具獲得了一個 --no-tests=<[error|ignore]> 選項,以明確設定和統一直接調用和腳本模式之間的行為(如果未找到測試)。

  • ctest(1) 工具獲得了一個 --repeat <mode>:<n> 選項,以指定在其中重複測試的條件。 這將現有的 --repeat-until-fail <n> 選項推廣為新增了 until-passafter-timeout 的模式。

  • ctest_test() 命令獲得了一個 REPEAT <mode>:<n> 選項,以指定在其中重複測試的條件。

CPack

其他

  • 如果終端機支援色彩,ccmake(1) 現在會根據條目類型使用顏色顯示快取值。

  • ccmake(1) 現在在設定和產生期間顯示訊息和進度條。 如果發生任何錯誤或警告,它將保持輸出的顯示。

已棄用和移除的功能

  • 為政策 CMP0068 和政策 CMP0069 新增了明確的棄用診斷訊息(CMP0067 及更早版本已棄用)。 cmake-policies(7) 手冊解釋說,所有政策的 OLD 行為都已棄用,專案應移植到 NEW 行為。

  • CPack PackageMaker 產生器已被棄用,因為 Xcode 不再發布 PackageMaker 工具。 未記載的 OSXX11 產生器也已被棄用。

  • cmake(1) 命令列 -E remove-E remove_directory 工具已被棄用,取而代之的是新的 -E rm 工具。 即使沒有強制選項,較舊的工具在指定的路徑不存在時總是返回 0,並且在不破壞相容性的情況下無法修復,因此已被取代。

  • 現在 CPack NSIS Generator 需要 NSIS 3.0 或更高版本。

其他變更

  • file API 索引檔案現在發出 multiConfig 標誌,指定產生器是否支援多個輸出組態。

  • 目標連結屬性 INTERFACE_LINK_OPTIONSINTERFACE_LINK_DIRECTORIESINTERFACE_LINK_DEPENDS 現在透過靜態程式庫上的私有依賴項進行傳遞。 請參閱政策 CMP0099

  • 當使用 MinGW 工具時,find_library() 命令預設不再尋找 .dll 檔案。 相反地,它期望 .dll.a 匯入程式庫可用。

  • 如果環境的 PATH 中存在 sh.exeMinGW Makefiles 產生器不再發出錯誤。

  • Ninja 產生器現在優先選擇 PATH 中出現的第一個 ninja 建置工具,無論它是否被稱為 ninja-buildninjasamu。 以前,會優先選擇這些名稱中第一個出現在 PATH 中任何位置的名稱。

  • 使用 SDCC 時,sdar 工具現在比 sdcclib 更受青睞作為程式庫管理員。 後者已在 SDCC 3.2.0 中棄用,並在 SDCC 3.8.6 中移除。

  • 使用 SDCC 時,預設標誌不再包含任何目標特定的標誌。 以前,預設標誌是針對 8051 硬編碼的。

  • CMAKE_VS_GLOBALS 變數值現在在編譯器識別期間以及由 add_custom_target() 命令建立的目標中套用。

  • Xcode 產生器不再硬編碼 -Wmost-Wno-four-char-constants-Wno-unknown-pragmas 警告標誌。

更新

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

3.17.1

  • CMake 3.17.0 更新了 CPack NSIS Generator,進行了需要 NSIS 3.0 或更高版本的變更。 CMake 3.17.1 現在強制使用足夠新的版本。

3.17.3

3.17.5

  • CMAKE_AUTOMOC_PATH_PREFIX 的預設值已變更為 OFF,因為此功能可能會破壞現有的專案,這些專案在不同的包含目錄中具有相同名稱的標頭檔。 這恢復了與 CMake 3.15 及更早版本的行為的相容性。 在 3.16.9 中,預設值也已變更為 OFF