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 每日更新之後)及更新版本。詳情請參閱
cmake-cxxmodules(7)
。現在可以使用 NVIDIA CUDA 編譯器 (NVCC) 編譯
HIP
語言程式碼,以用於 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
欄位的支援。
編譯器¶
指令¶
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
。這可以用於表示不應將其位置新增為連結它的相依項的執行階段搜尋路徑的虛設常式程式庫。macOS 框架的
IMPORTED_LOCATION
屬性現在可以是.framework
資料夾本身的路徑。新增了
XCODE_EMBED_RESOURCES
目標屬性,以告知Xcode
產生器應將哪些目標放入Embed Resources
建置階段。
模組¶
ExternalProject
模組現在為ExternalProject_Add()
命令加入了BUILD_JOB_SERVER_AWARE
選項。此選項在使用明確的BUILD_COMMAND
與特定的 Makefile 產生器 時,能夠整合 GNU Make 工作伺服器。此外,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¶
已針對
xros
和xrsimulator
SDK 的官方 Xcode 15.2 版本更新了 Apple visionOS 的支援。
3.28.5¶
此版本未對已記錄的功能或介面進行任何變更。針對 C++ 模組支援進行了一些實作更新。
3.28.6¶
此版本未對已記錄的功能或介面進行任何變更。為支援生態系統變更和/或修復回歸問題,進行了一些實作更新。