CMake 3.29 發行說明¶
自 CMake 3.28 以來的變更包括以下內容。
新功能¶
命令列¶
產生器¶
Visual Studio 產生器 現在支援使用
CMAKE_GENERATOR_TOOLSET
中的fortran=
欄位,來選擇 Intel oneAPI Fortran 編譯器 (ifx
) 和 Intel classic Fortran 編譯器 (ifort
)。
基於檔案的 API¶
cmake-file-api(7)
"codemodel" 版本 2 的version
欄位已更新為 2.7。cmake-file-api(7)
"codemodel" 版本 2 的 "target" 物件新增了 "launchers" 欄位。
編譯器¶
Windows 上的 LLVM/Clang 類 GNU 前端 (
clang++
) 現在可以用來編譯CUDA
語言原始碼。在 Windows 上以 GNU ABI 為目標的編譯器 (MinGW) 現在可以用來編譯 Objective C (
OBJC
) 和 Objective C++ (OBJCXX
)。這些包括 GNU 編譯器 (gcc
和g++
) 和 LLVM/Clang 類 GNU 前端 (clang
和clang++
)。現在支援基於 TI Clang 的編譯器,其
compiler id
為TIClang
。
命令¶
add_custom_command(TARGET) 簽名現在支援透過 別名目標 來新增建置事件。
新增了
cmake_language(EXIT)
子命令,以指定結束代碼終止cmake -P
指令碼。新增了
export(SETUP)
子命令來設定匯出集合。它的TARGET
選項的XCFRAMEWORK_LOCATION
設定指定.xcframework
的位置,該.xcframework
可以替代已安裝的目標。if()
命令新增了IS_READABLE
、IS_WRITABLE
和IS_EXECUTABLE
測試,以檢查檔案或目錄的權限。try_compile()
和try_run()
命令新增了LINKER_LANGUAGE
選項,以指定在產生的測試專案中的LINKER_LANGUAGE
目標屬性。
變數¶
新增了
CMAKE_INSTALL_PREFIX
環境變數,為CMAKE_INSTALL_PREFIX
變數提供預設值。新增了
CMAKE_LINKER_TYPE
變數和對應的LINKER_TYPE
目標屬性,以指定一些工具鏈要使用的連結器。新增了
CMAKE_<LANG>_COMPILER_LINKER
、CMAKE_<LANG>_COMPILER_LINKER_ID
、CMAKE_<LANG>_COMPILER_LINKER_VERSION
和CMAKE_<LANG>_COMPILER_LINKER_FRONTEND_VARIANT
變數,以描述語言的連結步驟所使用的連結器。CMAKE_PROJECT_INCLUDE
、CMAKE_PROJECT_INCLUDE_BEFORE
、CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
和CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE
變數學會支援要依序包含的 CMake 語言檔案的以分號分隔的清單。這些變數也可以參考要在CMAKE_MODULE_PATH
中找到或內建於 CMake 的模組名稱。新增了
CMAKE_SKIP_TEST_ALL_DEPENDENCY
變數,以控制test
(或RUN_TESTS
) 建置系統目標是否依賴於all
(或ALL_BUILD
) 目標。新增了
CMAKE_TEST_LAUNCHER
變數和對應的TEST_LAUNCHER
目標屬性,以指定當由add_test()
命令新增的測試調用時,可執行目標要使用的啟動器。
屬性¶
現在,
CROSSCOMPILING_EMULATOR
目標屬性支援產生器運算式
。現在,
UNITY_BUILD
目標屬性支援 Objective C (OBJC
) 和 Objective C++ (OBJCXX
) 語言。新增了
XCODE_EMBED_XPC_SERVICES
目標屬性,以告知Xcode
產生器將哪些目標放入Embed XPC Resources
建置階段。
模組¶
CMakePackageConfigHelpers
模組新增了generate_apple_platform_selection_file()
和generate_apple_architecture_selection_file()
函數,它們可用於產生一個檔案,該檔案分別包含另一個特定於 Apple 平台的檔案,或包含 Apple 平台套件的特定於架構的實作。FindOpenGL
模組學會尋找與 GL include 目錄不同的 GLU include 目錄。新的OPENGL_INCLUDE_DIRS
結果變數提供所有 include 目錄。
CTest¶
ctest(1)
新增了--http-header
選項,以便在提交至 CDash 時新增自訂標頭。ctest(1)
新增了--tests-from-file
和--exclude-from-file
選項,以便執行或排除檔案中命名的測試。現在可以不帶值地給定
ctest -j
選項,讓 ctest 選擇預設的平行處理程度,也可以使用0
讓 ctest 使用無限制的平行處理。如果將對應的CTEST_PARALLEL_LEVEL
環境變數設定為空字串,現在等同於傳遞沒有值的-j
。ctest_test()
命令新增了INCLUDE_FROM_FILE
和EXCLUDE_FROM_FILE
選項,以便執行或排除檔案中命名的測試。
CPack¶
CPack DEB 產生器
CPACK_DEBIAN_FILE_NAME
變數現在可以設定為不帶任何後綴,並且.deb
後綴將會自動新增。CPack RPM 產生器
CPACK_RPM_FILE_NAME
變數現在可以設定為不帶任何後綴,並且.rpm
後綴將會自動新增。CPack WIX 產生器
新增了一個新變數CPACK_WIX_INSTALL_SCOPE
,以控制 WiX MSI 安裝程式的InstallScope
屬性。
其他變更¶
CMake 學會根據連結器的功能,在連結行上刪除重複的程式庫。請參閱政策
CMP0156
。現在,
add_test()
命令僅在交叉編譯時才會遵守CMAKE_CROSSCOMPILING_EMULATOR
。請參閱政策CMP0158
。在 Windows 上,當以 MSVC ABI 為目標時,
find_library()
命令現在在先考慮.lib
之後,接受.a
檔案名稱。這與以 GNU ABI 為目標時的現有行為對稱,其中該命令在先考慮.a
之後,接受.lib
檔案名稱。在 Windows 上,當以 MSVC ABI 為目標時,
find_library()
命令現在在.lib
之前考慮.dll.lib
檔案名稱。這是 Rust 工具鏈為 MSVC ABI 建立的 DLL 匯入程式庫的預設後綴。現在,
Ninja
和NMake Makefiles
產生器在從版本 2021.4 開始使用 IntelLLVM 時,會使用-external:I
旗標來進行系統包含。從版本 2022.2 開始,也會使用-external:W0
旗標。create_test_sourcelist()
命令現在提供產生之驅動程式原始檔的完整路徑。CPACK_PRODUCTBUILD_DOMAINS
變數現在預設為 true。請參閱政策CMP0161
。
更新¶
自 CMake 3.29.0 以來所做的變更包括以下內容。
3.29.1¶
現在,
CMAKE_LINKER_TYPE
變數和對應的LINKER_TYPE
目標屬性可與Swift
語言的編譯器一起使用。
3.29.2, 3.29.3, 3.29.4¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統的變更和/或修復回歸錯誤。
3.29.5¶
CPack WIX 產生器
的CPACK_WIX_INSTALL_SCOPE
變數(在 3.29 版本中新增)現在預設為NONE
。這恢復了與 3.28 及更早版本行為的相容性:在沒有自訂 WiX 範本的情況下,它產生的安裝程式只會為目前的使用者建立開始功能表和解除安裝項目,即使它們是為所有使用者安裝的。在 3.29.0 至 3.29.4 版本中,
CPACK_WIX_INSTALL_SCOPE
預設為perMachine
。這會建立 MSI 安裝程式,預設會為所有使用者建立開始功能表和解除安裝項目。雖然這種行為本身更好,但這些安裝程式無法完全取代使用 3.28 及更早版本產生的 MSI 安裝程式所建立的現有安裝。3.29.5 版本為了相容性還原了預設值。專案可以透過設定CPACK_WIX_INSTALL_SCOPE
,自行決定在何時轉換到perMachine
。
3.29.6, 3.29.7, 3.29.8¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統的變更和/或修復回歸錯誤。