CMake 3.19 發行說明

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

新功能

預設設定

產生器

  • 當為 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 語言支援現在可以在 QNX 上運作。

平台

基於檔案的 API

  • cmake-file-api(7) 「程式碼模型」第 2 版 version 欄位已更新為 2.2。

  • cmake-file-api(7)「程式碼模型」第 2 版「目標」物件在 compileGroups 物件中新增了 languageStandard 欄位。

命令列

  • cmake(1) 命令列工具的 --install 模式新增了 --default-directory-permissions 選項。

  • cmake(1) 增加了 -E create_hardlink 命令列工具,可用於在檔案之間建立硬連結。

GUI

  • CMake GUI 現在具有環境變數編輯器。

指令

  • add_test() 指令現在(正式)支援在其建立的測試名稱中使用空格和其他特殊字元。請參閱原則 CMP0110

變數

屬性

模組

    • 一個匯入的目標 SDL::SDL

    • 結果變數 SDL_LIBRARIESSDL_INCLUDE_DIRS

    • 版本變數 SDL_VERSIONSDL_VERSION_MAJOR

  • 不再支援早於 10.5 的 macOS SDK。

已新增以下指南:

  • 如果沒有設定其他來源(例如 CMAKE_<LANG>_FLAGSCFLAGS),則編譯器識別檢查現在會考慮 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_ARCHITECTURESCMAKE_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_64arm64 架構的通用二進位檔。它需要 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 上提供預編譯的 Linux aarch64 二進位檔。

  • 現在在 cmake.org 上提供兩個預編譯的 macOS 二進位檔。

    • 命名模式 cmake-$ver-macos-universal 是具有 x86_64arm64 架構的通用二進位檔。它需要 macOS 10.13 或更新版本。

    • 命名模式 cmake-$ver-macos10.10-universal 是具有 x86_64arm64 架構的通用二進位檔。它需要 macOS 10.10 或更新版本。

3.19.4

3.19.5

  • 當啟用 IOS_INSTALL_COMBINED 並使用 Xcode 產生器時,現在可以透過從命令列執行 cmake --installcpack 來啟動安裝或套件建立。當使用 Xcode 新的組建系統時,由於 Xcode 的限制,這些是唯一支援的方法。僅當使用舊版組建系統時,才支援透過在 Xcode 中組建 installpackage 目標來啟動這些作業。

  • 在 3.19.0 中引入,作為支援 Xcode 的使用程式庫連結二進位檔組建階段一部分的框架處理,破壞了在不重新設定的情況下在裝置和模擬器組建之間切換的功能。該功能現在已還原。

3.19.6

  • cmake-presets(7) 功能不再允許在 CMakePresets.jsonCMakeUserPresets.json 檔案中註解。這在 CMake 3.19.0 到 CMake 3.19.5 的實作中被錯誤地允許,並且未記錄在文件中。

3.19.7