CMake 3.29 發行說明¶
自 CMake 3.28 以來所做的變更包括以下內容。
新功能¶
命令列¶
產生器¶
Visual Studio 產生器 現在支援在 Intel oneAPI Fortran 編譯器 (
ifx
) 和 Intel classic Fortran 編譯器 (ifort
) 之間進行選擇,方法是在CMAKE_GENERATOR_TOOLSET
中使用fortran=
欄位。
基於檔案的 API¶
cmake-file-api(7)
"codemodel" 版本 2version
欄位已更新至 2.7。cmake-file-api(7)
"codemodel" 版本 2 "target" 物件新增了 "launchers" 欄位。
編譯器¶
Windows 上的 LLVM/Clang 類 GNU 前端 (
clang++
) 現在可用於編譯CUDA
語言來源。Windows (MinGW) 上以 GNU ABI 為目標的編譯器現在可用於編譯 Objective C (
OBJC
) 和 Objective C++ (OBJCXX
)。 這些包括 GNU 編譯器 (gcc
和g++
) 以及 LLVM/Clang 類 GNU 前端 (clang
和clang++
)。現在透過
compiler id
TIClang
支援基於 TI Clang 的編譯器。
命令¶
add_custom_command(TARGET) 簽章現在支援透過 別名目標 新增建置事件。
cmake_language(EXIT)
子命令已新增,用於終止具有指定結束代碼的cmake -P
指令碼。export(SETUP)
子命令已新增,用於配置匯出集。 其TARGET
選項的XCFRAMEWORK_LOCATION
設定指定了.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 為目標時的現有行為對稱,在 GNU ABI 中,該命令在首先考慮.a
之後接受.lib
檔案名稱。在 Windows 上,當以 MSVC ABI 為目標時,
find_library()
命令現在在.lib
之前考慮.dll.lib
檔案名稱。 這是 Rust 工具鏈為 MSVC ABI 建立的 DLL 匯入程式庫的預設後綴。Ninja
和NMake Makefiles
產生器現在將-external:I
標誌用於系統 include,當使用 IntelLLVM 2021.4 或更高版本時。-external:W0
標誌也用於 2022.2 或更高版本。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、3.29.9¶
這些版本未對文件中記錄的功能或介面進行任何變更。 進行了一些實作更新以支援生態系統變更和/或修復回歸。