CMake 3.19 發行說明

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

新功能

預設集

產生器

  • Xcode 產生器在為 Xcode 12.0 或更高版本產生時,現在使用 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 目前受到 Makefile 產生器Ninja 產生器在 Linux、macOS 和 Windows 上使用 Intel ISPC 編譯器的支援。

  • CUDA 語言對 Clang 的支援現在包括

  • CUDA 語言支援現在可以在 QNX 上運作。

平台

基於檔案的 API

  • cmake-file-api(7) “codemodel” 版本 2 version 欄位已更新為 2.2。

  • cmake-file-api(7) “codemodel” 版本 2 “target” 物件在 compileGroups 物件中獲得了新的 languageStandard 欄位。

命令列

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

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

圖形使用者介面

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

命令

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

  • cmake_language() 命令獲得了 DEFER 模式,用於排程命令調用在處理目錄結束時發生。

  • configure_file() 命令獲得了 NO_SOURCE_PERMISSIONS 選項,用於禁止將輸入檔案的權限複製到輸出檔案。

  • execute_process() 命令獲得了 COMMAND_ERROR_IS_FATAL 選項,用於指定嚴重錯誤。

  • file(ARCHIVE_CREATE) 命令獲得了 COMPRESSION_LEVEL 選項,用於指定壓縮等級。

  • file(CHMOD)file(CHMOD_RECURSE) 子命令已新增,用於設定檔案和目錄的權限。

  • file(DOWNLOAD) 命令 <file> 引數現在是選填的。如果未指定,則不會儲存檔案。

  • file(GENERATE) 命令獲得了新的 TARGET 關鍵字,以支援解析依賴目標的產生器表達式。

  • file() 命令獲得了新的 REAL_PATH 子命令,用於計算已解析符號連結的路徑。

  • find_package() 命令學會處理版本範圍。

  • separate_arguments() 命令獲得了新的 PROGRAM 選項。它允許將引數視為程式調用,並在可以找到可執行檔時將其解析為完整路徑。

  • DIRECTORY 選項的 set_property()get_property()get_directory_property() 命令現在接受對二進制目錄路徑的引用,例如 CMAKE_CURRENT_BINARY_DIR 的值。

  • string() 命令獲得了一組新的 JSON 子命令,這些子命令提供 JSON 解析功能。

變數

屬性

模組

CTest

  • ctest(1) 現在支援 CUDA compute-sanitizer 檢查器 (以前稱為 cuda-memcheck) 作為 CTEST_MEMORYCHECK_COMMANDcompute-sanitizer 支援的不同工具 (memcheckracechecksynccheckinitcheck) 可以透過將適當的旗標新增到 CTEST_MEMORYCHECK_COMMAND_OPTIONS 變數來選擇。預設旗標為 --tool memcheck --leak-check full

CPack

其他

已棄用和移除的功能

  • 與舊於 2.8.12 版本的 CMake 的相容性現在已棄用,並將在未來版本中移除。 調用 cmake_minimum_required()cmake_policy() 將策略版本設定為較舊值的操作,現在會發出棄用診斷訊息。

  • 已為策略 CMP0071 新增明確的棄用診斷訊息(CMP0071 及以下版本已遭棄用)。 cmake-policies(7) 手冊說明所有策略的舊行為都已棄用,專案應移植到新行為。

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

  • cmake-gui(1)」現在需要 Qt5。 已移除使用 Qt4 編譯的支援。

  • cmake(1)」命令列選項 --warn-unused-vars 已移除,現在會靜默忽略。 此選項自 CMake 3.3 以來就未正確運作。

文件

已新增以下指南

其他變更

  • 現在為 macOS 建置時,將使用系統上可用的最新 SDK,除非使用者已使用 CMAKE_OSX_SYSROOT 明確選擇 SDK。 部署目標或系統 macOS 版本不會影響 SDK 的選擇。

  • CMAKE_<LANG>_COMPILER」變數現在可用於儲存「強制性」編譯器旗標,例如 CC 和其他環境變數。

  • 如果未設定其他來源(例如「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」目標屬性。

  • 如果 CUDA 編譯器偵測失敗,並具有使用者指定的「CMAKE_CUDA_ARCHITECTURES」或「CMAKE_CUDA_HOST_COMPILER」,則會引發錯誤。

更新

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

3.19.1

  • CMake 3.19.0 透過傳遞明確的語言旗標(例如 -x c),使用「LANGUAGE」屬性編譯原始檔。 這與屬性文件中說明的含義一致,即原始檔是以指定的語言撰寫。 然而,這可能會破壞僅使用該屬性來導致使用指定語言的編譯器的專案。 此變更已還原,以恢復 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