CMake 3.19 發行說明¶
自 CMake 3.18 以來所做的變更包括以下內容。
新功能¶
預設設定¶
cmake(1)
和cmake-gui(1)
現在可以識別CMakePresets.json
和CMakeUserPresets.json
檔案 (請參閱cmake-presets(7)
)。
產生器¶
當為 Xcode 12.0 或更高版本產生時,
Xcode
產生器現在使用 Xcode「新的建置系統」。請參閱CMAKE_XCODE_BUILD_SYSTEM
變數。可以使用-T buildsystem=1
切換到舊版建置系統。Xcode
產生器增加了透過「使用函式庫連結二進位檔」建置階段連結函式庫和框架的支援,而不是總是直接嵌入連結器旗標。此行為由新的XCODE_LINK_BUILD_PHASE_MODE
目標屬性控制,該屬性由新的CMAKE_XCODE_LINK_BUILD_PHASE_MODE
變數初始化。適用於 VS 2015 和更高版本的 Visual Studio 產生器 增加了對 Visual Studio Tools for Android 的支援。現在可以將
CMAKE_SYSTEM_NAME
設定為Android
,以便為 Android 工具產生.vcxproj
檔案。
程式語言¶
CMake 學會支援
ISPC
作為一級語言,可以透過project()
和enable_language()
指令啟用。ISPC
目前在 Linux、macOS 和 Windows 上使用 Intel ISPC 編譯器,受到 Makefile 產生器 和Ninja
產生器的支援。適用於 Clang 的
CUDA
語言支援現在包括可分離編譯 (
CUDA_SEPARABLE_COMPILATION
),以及在交叉編譯時尋找分散的工具組安裝。
CUDA
語言支援現在可以在 QNX 上運作。
平台¶
現在支援 Apple Silicon (自 CMake 3.19.2 起)
使用
uname -m
選取CMAKE_HOST_SYSTEM_PROCESSOR
。由於這可能會根據 CMake 本身的架構和調用程序樹的架構而有所不同,因此可以設定CMAKE_APPLE_SILICON_PROCESSOR
變數或CMAKE_APPLE_SILICON_PROCESSOR
環境變數來明確指定主機架構。如果未設定
CMAKE_OSX_ARCHITECTURES
,CMake 會新增明確的旗標,以告知編譯器為CMAKE_HOST_SYSTEM_PROCESSOR
建置,因此工具鏈不必根據程序樹的架構來猜測。
基於檔案的 API¶
cmake-file-api(7)
「程式碼模型」第 2 版version
欄位已更新為 2.2。cmake-file-api(7)
「程式碼模型」第 2 版「目標」物件在compileGroups
物件中新增了languageStandard
欄位。
命令列¶
GUI¶
CMake GUI
現在具有環境變數編輯器。
指令¶
add_test()
指令現在(正式)支援在其建立的測試名稱中使用空格和其他特殊字元。請參閱原則CMP0110
。
變數¶
屬性¶
模組¶
-
一個匯入的目標
SDL::SDL
。結果變數
SDL_LIBRARIES
和SDL_INCLUDE_DIRS
。版本變數
SDL_VERSION
、SDL_VERSION_MAJOR
、
不再支援早於 10.5 的 macOS SDK。
已新增以下指南:
如果沒有設定其他來源(例如
CMAKE_<LANG>_FLAGS
或CFLAGS
),則編譯器識別檢查現在會考慮CMAKE_<LANG>_FLAGS_INIT
變數。find_program()
命令現在需要執行權限,但不需要讀取找到的檔案的權限。請參閱政策CMP0109
。如果匯入的目標缺少其位置屬性,且在產生時使用了該位置,則會產生錯誤。請參閱政策
CMP0111
。下列查詢目錄或檔案名稱組件的基於目標產生器運算式不再增加對已評估目標的依賴。請參閱政策
CMP0112
。TARGET_FILE_DIR
TARGET_LINKER_FILE_BASE_NAME
TARGET_LINKER_FILE_NAME
TARGET_LINKER_FILE_DIR
TARGET_SONAME_FILE_NAME
TARGET_SONAME_FILE_DIR
TARGET_PDB_FILE_NAME
TARGET_PDB_FILE_DIR
TARGET_BUNDLE_DIR
TARGET_BUNDLE_CONTENT_DIR
Makefile 產生器 不再重複來自目標依賴項的自訂命令。請參閱政策
CMP0113
。已修訂
ExternalProject
模組對步驟目標依賴項的處理方式。請參閱政策CMP0114
。現在針對
ASM
語言會考量OSX_ARCHITECTURES
目標屬性。如果使用使用者指定的
CMAKE_CUDA_ARCHITECTURES
或CMAKE_CUDA_HOST_COMPILER
時,CUDA
編譯器偵測失敗,則會引發錯誤。
更新¶
自 CMake 3.19.0 以來所做的變更包括下列項目。
3.19.1¶
CMake 3.19.0 使用
LANGUAGE
屬性並傳遞明確的語言標誌(例如-x c
)來編譯原始檔。這與該屬性的已記錄含義一致,即原始檔是以指定的語言撰寫的。但是,這可能會破壞僅使用該屬性來導致使用指定語言的編譯器的專案。這已還原為 CMake 3.18 及以下版本的行為。CUDA 11.1 支援 Clang。
3.19.2¶
在
cmake.org
上提供的預編譯 macOS 二進位檔現在是具有x86_64
和arm64
架構的通用二進位檔。它需要 macOS 10.10 或更新版本。套件檔案命名模式已從cmake-$ver-Darwin-x86_64
變更為cmake-$ver-macos-universal
。已更新 Apple Silicon 主機架構選取支援。CMake 3.19.0 和 3.19.1 一律選擇
arm64
作為主機架構。CMake 3.19.2 還原為使用uname -m
,如同 CMake 3.18 及以下版本一樣。由於這可能會根據 CMake 自身的架構和叫用程序樹狀結構的架構而有所不同,因此可以設定CMAKE_APPLE_SILICON_PROCESSOR
變數或CMAKE_APPLE_SILICON_PROCESSOR
環境變數來明確指定主機架構。新增了
CMAKE_ISPC_HEADER_SUFFIX
變數和對應的ISPC_HEADER_SUFFIX
目標屬性,以控制ISPC
編譯器產生的標頭所使用的標頭後綴。
3.19.3¶
現在在
cmake.org
上提供預編譯的 Linuxaarch64
二進位檔。現在在
cmake.org
上提供兩個預編譯的 macOS 二進位檔。命名模式
cmake-$ver-macos-universal
是具有x86_64
和arm64
架構的通用二進位檔。它需要 macOS 10.13 或更新版本。命名模式
cmake-$ver-macos10.10-universal
是具有x86_64
和arm64
架構的通用二進位檔。它需要 macOS 10.10 或更新版本。
3.19.4¶
在 3.19.0 中引入的
CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM
變數先前僅適用於Visual Studio 14 2015
產生器。現在已修正為也可適用於更高 VS 版本的 Visual Studio 產生器。
3.19.5¶
當啟用
IOS_INSTALL_COMBINED
並使用Xcode
產生器時,現在可以透過從命令列執行cmake --install
或cpack
來啟動安裝或套件建立。當使用 Xcode 新的組建系統時,由於 Xcode 的限制,這些是唯一支援的方法。僅當使用舊版組建系統時,才支援透過在 Xcode 中組建install
或package
目標來啟動這些作業。在 3.19.0 中引入,作為支援 Xcode 的使用程式庫連結二進位檔組建階段一部分的框架處理,破壞了在不重新設定的情況下在裝置和模擬器組建之間切換的功能。該功能現在已還原。
3.19.6¶
cmake-presets(7)
功能不再允許在CMakePresets.json
或CMakeUserPresets.json
檔案中註解。這在 CMake 3.19.0 到 CMake 3.19.5 的實作中被錯誤地允許,並且未記錄在文件中。
3.19.7¶
對於 VS 2017 及更高版本的 Visual Studio 產生器,
CMAKE_GENERATOR_TOOLSET
欄位version=
現在接受三元件 MSVC 工具組版本,例如14.28.29910
。請參閱CMAKE_VS_PLATFORM_TOOLSET_VERSION
變數。