CMake 3.28 發行說明¶
自 CMake 3.27 以來所做的變更包括以下內容。
新功能¶
語言¶
Ninja 產生器 和 Visual Studio 產生器 現在支援 C++ 20 具名模組,適用於 VS 2022 及更新版本,並結合 MSVC 14.34 工具組(VS 17.4 隨附)及更新版本、LLVM/Clang 16.0 及更新版本,以及 GCC 14(在 2023-09-20 daily bump 之後)及更新版本。詳情請參閱
cmake-cxxmodules(7)
。HIP
語言程式碼現在可以使用 NVIDIA CUDA 編譯器 (NVCC) 針對 NVIDIA GPU 進行編譯。請參閱CMAKE_HIP_PLATFORM
變數。
平台¶
在 Apple 平台上,現在支援
.xcframework
資料夾find_library()
命令現在會尋找.xcframework
資料夾。target_link_libraries()
命令現在支援連結.xcframework
資料夾。匯入的程式庫目標的
IMPORTED_LOCATION
目標屬性現在可以是.xcframework
資料夾的路徑。
現在支援 Apple visionOS 及其
xros
和xrsimulator
SDK。可以透過將CMAKE_SYSTEM_NAME
設定為visionOS
來請求為 Apple visionOS 編譯。如需更多資訊,請參閱 為 iOS、tvOS、visionOS 或 watchOS 進行交叉編譯。
預設集¶
cmake-presets(7)
檔案現在支援結構描述版本8
。它新增了對$schema
欄位的支援。
編譯器¶
現在透過
compiler id
CrayClang
支援 Cray Clang 架構的編譯器。現在透過
compiler id
OrangeC
支援 OrangeC 編譯器。
命令¶
add_custom_command()
和add_custom_target()
命令新增了JOB_SERVER_AWARE
選項。cmake_host_system_information()
命令新增了MSYSTEM_PREFIX
查詢,用於查詢 Windows 主機上 MSYS 或 MinGW 開發環境的安裝前置路徑。set_property()
命令的TEST
模式新增了DIRECTORY
選項,用於設定其他目錄中測試的屬性。set_tests_properties()
命令新增了DIRECTORY
選項,用於設定其他目錄中測試的屬性。get_property()
命令的TEST
模式新增了DIRECTORY
選項,用於取得其他目錄中測試的屬性。get_test_property()
命令新增了DIRECTORY
選項,用於取得其他目錄中測試的屬性。
變數¶
新增了
CMAKE_CROSSCOMPILING_EMULATOR
環境變數,以初始化CMAKE_CROSSCOMPILING_EMULATOR
快取變數。新增了
CMAKE_HIP_PLATFORM
變數,以指定要編譯 HIP 語言來源的 GPU 平台 (amd
或nvidia
)。
屬性¶
在匯入的共用程式庫上,
IMPORTED_IMPLIB
目標屬性現在可以在沒有IMPORTED_LOCATION
的情況下使用。這可用於表示 Stub 程式庫,其位置不應作為執行階段搜尋路徑新增至連結它的相依項。macOS Framework 的
IMPORTED_LOCATION
屬性現在可以是.framework
資料夾本身的路徑。新增了
XCODE_EMBED_RESOURCES
目標屬性,以告知Xcode
產生器要將哪些目標放入Embed Resources
建置階段。
模組¶
ExternalProject
模組現在包含ExternalProject_Add()
命令的BUILD_JOB_SERVER_AWARE
選項。當搭配特定 Makefile 產生器 使用明確的BUILD_COMMAND
時,此選項可啟用 GNU Make Job Server 的整合。此外,ExternalProject_Add_Step()
命令已更新為支援新的JOB_SERVER_AWARE
選項。FetchContent
模組的FetchContent_Declare()
命令新增了EXCLUDE_FROM_ALL
選項,此選項會傳播到add_subdirectory()
呼叫,此呼叫由相依項的FetchContent_MakeAvailable()
進行。FindCURL
模組新增了CURL_USE_STATIC_LIBS
提示,以選取靜態程式庫。FindEXPAT
模組新增了EXPAT_USE_STATIC_LIBS
提示,以選取靜態程式庫。FindPkgConfig
模組的pkg_get_variable()
命令新增了DEFINE_VARIABLES
選項,以將變數傳遞至pkg-config
。
產生器運算式¶
產生器運算式
$<IF:...>
、$<AND:...>
和$<OR:...>
進行短路,以避免不必要的參數評估。
CTest¶
CTest 現在可以採用動態產生的資源規格檔案,該檔案可以透過
GENERATED_RESOURCE_SPEC_FILE
測試屬性指定。
已棄用和移除的功能¶
自 CMake 3.0 起已棄用的
exec_program()
命令已透過政策CMP0153
移除。請改用execute_process()
命令。已移除
Visual Studio 11 2012
產生器。Visual Studio 12 2013
產生器現在已棄用,並將在 CMake 的未來版本中移除。已棄用
IOS_INSTALL_COMBINED
目標屬性和對應的CMAKE_IOS_INSTALL_COMBINED
變數。它們的功能在 Apple Silicon 主機上沒有意義。如果為 Xcode 14 及更新版本選取了舊版建置系統,
Xcode
產生器現在會發出嚴重錯誤。這些 Xcode 版本已停止支援舊版建置系統,並期望專案是為其目前的建置系統設定的。
其他變更¶
在使用 檔案集 的目標中,產生的檔案現在預設為私有。產生的公開標頭必須使用檔案集指定。這讓 Ninja 產生器 可以產生更有效率的建置圖。請參閱政策
CMP0154
。find_library()
、find_path()
和find_file()
命令不再在衍生自PATH
環境變數的安裝前置路徑中搜尋。此行為已在 CMake 3.3 中新增,以支援 Windows 上的 MSYS 和 MinGW (MSYSTEM
) 開發環境,但它可能會搜尋到碰巧因為不相關原因而位於PATH
中的非預期前置路徑。僅為了工具而將某些<prefix>/bin
目錄保留在PATH
中的使用者,不一定希望搜尋任何對應的<prefix>/lib
或<prefix>/include
目錄。此行為已在 CMake 3.6 中還原為非 Windows 平台。現在它也已在 Windows 平台上還原。可以將
CMAKE_PREFIX_PATH
環境變數設定為要搜尋的前置路徑的 分號分隔清單。在 Windows 上的
MSYSTEM
環境中使用 MinGW 工具時,$MSYSTEM_PREFIX/local
和$MSYSTEM_PREFIX
前置路徑現在會新增至CMAKE_SYSTEM_PREFIX_PATH
。在 cmake.org 上提供的預先編譯 Linux
x86_64
二進位檔現在需要 GLIBC 2.17 或更高版本。
更新¶
自 CMake 3.28.0 以來所做的變更包括以下內容。
3.28.1、3.28.2、3.28.3¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。
3.28.4¶
Apple visionOS 支援已針對
xros
和xrsimulator
SDK 的正式 Xcode 15.2 版本進行更新。
3.28.5¶
此版本未對已記錄的功能或介面進行任何變更。針對 C++ 模組支援進行了一些實作更新。
3.28.6¶
此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。