CMake 3.21 發行說明¶
自 CMake 3.20 以來的變更包括以下內容。
新功能¶
預設設定¶
cmake-presets(7)
增加了在組態預設設定中指定安裝前綴的支援。cmake-presets(7)
增加了條件式啟用預設設定的支援。cmake-presets(7)
增加了對${hostSystemName}
巨集的支援。cmake-presets(7)
增加了省略generator
和binaryDir
欄位的支援。
產生器¶
新增了
Visual Studio 17 2022
產生器。Makefile 產生器 和
Ninja
產生器學會了為C
、CXX
、OBJC
和OBJCXX
語言新增連結器啟動工具以及連結器。有關詳細資訊,請參閱CMAKE_<LANG>_LINKER_LAUNCHER
變數和<LANG>_LINKER_LAUNCHER
目標屬性。
語言¶
CMake 學會了支援
HIP
作為一流的語言,可以透過project()
和enable_language()
命令啟用。C_STANDARD
、OBJC_STANDARD
和編譯功能
功能增加了對 C17 和 C23 的支援。原始程式碼副檔名
.ixx
和.cppm
現在被視為 C++。
命令列¶
cmake(1)
增加了--install-prefix
命令列選項,以指定安裝前綴的位置。cmake(1)
增加了--toolchain
命令列選項,以指定工具鏈檔案。cmake(1)
-E capabilities
輸出,對於某些產生器,現在可能包含一個supportedPlatforms
欄位,列出CMAKE_GENERATOR_PLATFORM
中已知支援的平台。列印到終端機的訊息現在可能會根據訊息類型著色。
編譯器¶
現在支援使用傳統 (
Trad
) 模式中的編譯器 IDFujitsu
和Clang
模式中的編譯器 IDFujitsuClang
的 Fujitsu 編譯器。
平台¶
CMake 現在支援 MSYS 執行階段環境,與 CYGWIN 非常相似。
基於檔案的 API¶
cmake-file-api(7)
"codemodel" 版本 2version
欄位已更新為 2.3。cmake-file-api(7)
"codemodel" 版本 2 獲得了一個新的 "directory" 物件,其中包含目錄層級資訊。這包括由install()
命令產生的安裝程式列表。
命令¶
add_custom_command()
命令DEPFILE
選項現在可以使用
產生器表達式
,現在由 VS 2012 及更高版本的 Visual Studio 產生器 支援,並且
現在由
Xcode
產生器支援。
add_custom_command(TARGET)
命令(適用於 建置事件)增加了對解析相依於目標的產生器表達式的支援。build_command()
命令增加了一個PARALLEL_LEVEL
選項。新增了
file(COPY_FILE)
命令,以複製單一檔案。
新增了一個
TARGET_RUNTIME_DLLS
產生器表達式。
CTest¶
ctest(1)
學會辨識在執行時附加到測試的檔案。先前僅能透過使用ATTACHED_FILES
或ATTACHED_FILES_ON_FAIL
測試屬性,在設定時附加檔案到測試。請參閱 額外測試量測 以取得更多資訊。ctest(1)
增加了一個--output-junit
選項,可將測試結果寫入 JUnit XML 檔案。ctest_build()
命令增加了一個PARALLEL_LEVEL
選項。
CPack¶
CPack DragNDrop 產生器
增加了選項CPACK_DMG_FILESYSTEM
,以控制.dmg
檔案系統。CPack IFW 產生器
現在支援在給予cpack_ifw_configure_component()
或cpack_ifw_configure_component_group()
作為DEPENDS
或DEPENDENCIES
引數時,名稱中使用連字號。這需要 QtIFW 3.1 或更高版本。CPack NSIS 產生器
增加了一個新的CPACK_NSIS_EXECUTABLE
變數,以指定要使用的makensis
可執行檔,而不是預設的。新增了
CPACK_CUSTOM_INSTALL_VARIABLES
變數,以在 CPack 建立的cmake_install.cmake
腳本調用中設定變數。
已棄用和移除的功能¶
完全移除了未記錄的
CMAKE_SYSTEM_NAME
版本剝離行為。如果它是由-D
旗標或toolchain 檔案
設定,則會保持不變,即使它仍然包含版本號碼。類似的CMAKE_HOST_SYSTEM_NAME
版本剝離行為(也未記錄)已提前移動,在呼叫project()
或enable_language()
之前。ARMClang
cpu/arch 編譯和連結旗標不再根據CMAKE_SYSTEM_PROCESSOR
變數或未記錄的CMAKE_SYSTEM_ARCH
變數自動新增。它們必須明確指定。請參閱策略CMP0123
。
其他變更¶
find_file()
、find_path()
、find_program()
和find_library()
命令以相同的方式處理快取變數,無論它們是如何定義的。請參閱策略CMP0125
以取得詳細資訊。find_file()
、find_path()
、find_program()
和find_library()
命令增加了一個NO_CACHE
選項,以將尋找結果儲存在一般變數中。list()
命令的GET
、INSERT
、SUBLIST
和REMOVE_AT
子命令現在會在根據策略CMP0121
的設定,將無效(即非整數)值作為任何索引引數時發生錯誤。set(CACHE)
命令不再移除相同名稱的一般變數(如果有的話)。請參閱策略CMP0126
。target_link_libraries()
呼叫透過TARGET_OBJECTS
產生器表達式引用物件函式庫時,現在會將物件檔案放在連結行的所有函式庫之前,無論它們指定的順序為何。有關詳細資訊,請參閱 透過 $<TARGET_OBJECTS> 連結物件函式庫 的文件。現在 Ninja 產生器 使用絕對路徑將原始程式檔和包含目錄傳遞給編譯器。這使得診斷訊息和除錯符號更加一致,並與 Makefile 產生器 相符。
現在,當使用 VS 9 或更高版本的
nmake
時,NMake Makefiles
產生器會將產生的 makefile 編碼為帶有 BOM 的 UTF-8。適用於 VS 2010 及更高版本的 Visual Studio 產生器 現在會將每個原始程式碼的預處理器定義放在目標範圍的預處理器定義之後。這使得 VS 與 Ninja 產生器 和 Makefile 產生器 一致。
現在,cmake.org 上提供的預編譯二進制檔支援
liblzma
多執行緒。請參閱CPACK_THREADS
和CPACK_ARCHIVE_THREADS
變數。
更新¶
自 CMake 3.21.0 以來的變更包括以下內容。
3.21.1¶
Visual Studio 17 2022
產生器現在基於「Visual Studio 2022 Preview 2」。之前是基於「Preview 1.1」。
3.21.2¶
啟用
CUDA_SEPARABLE_COMPILATION
的CUDA
目標現在可以在非根目錄中正確產生。Visual Studio 17 2022
產生器現在基於「Visual Studio 2022 Preview 3.1」。之前是基於「Preview 2」。
3.21.3¶
Visual Studio 17 2022
產生器現在基於「Visual Studio 2022 Preview 4」。之前是基於「Preview 3.1」。CMake 3.21.0 至 3.21.2 將 AMD ROCm 平台
hipcc
編譯器識別為具有 idROCMClang
的不同編譯器。由於它導致回歸,因此已將其移除。取而代之的是由於
hipcc
會干擾 CMake 需要傳遞給 Clang 的旗標,因此不再將其用作HIP
編譯器。請直接使用 Clang。hipcc
可以再次用作CXX
編譯器,並且像 CMake 3.20 及更早版本一樣,會被視為它在底層選擇的任何編譯器。
3.21.4¶
Visual Studio 17 2022
產生器現在基於「Visual Studio 2022」候選版本。之前是基於預覽版本。
3.21.5、3.21.6、3.21.7¶
這些版本沒有對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。