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

  • 當使用 -C <cfg> 呼叫 ctest(1) 時,CTEST_CONFIGURATION_TYPE 變數現在會從命令列設定。

  • 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 產生器也已被棄用。

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

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

其他變更

  • file API 索引檔案現在會發出一個 multiConfig 旗標,指定產生器是否支援多個輸出設定。

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

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

  • MinGW Makefiles 產生器如果環境的 PATH 中存在 sh.exe,則不再發出錯誤訊息。

  • Ninja 產生器現在優先選擇 PATH 中出現的第一個 ninja 建置工具,無論它被稱為 ninja-buildninja 還是 samu。 以前,無論在 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