CMake 3.24 發行說明¶
自 CMake 3.23 以來所做的變更包括以下內容。
新功能¶
預設值¶
cmake-presets(7)
檔案現在支援綱要版本5
。cmake-presets(7)
檔案現在支援${pathListSep}
巨集,它會根據平台展開為:
或;
。cmake-presets(7)
檔案在測試預設中增加了指定testOutputTruncation
欄位的支援,該欄位指定達到最大測試輸出大小後使用的截斷模式。
產生器¶
如果任何 CMake 檔案更新,
Green Hills MULTI
產生器現在會產生建置規則來重新執行 CMake。當使用 VS 2019 Update 11 或更新版本時,Visual Studio 產生器現在支援
SYSTEM
標頭。
命令列¶
cmake(1)
增加了--fresh
命令列選項,可以在設定建置樹時移除任何現有的CMakeCache.txt
檔案和相關聯的CMakeFiles/
目錄,因此會像剛建立建置樹一樣開始新的設定。cmake(1)
增加了--compile-no-warning-as-error
命令列選項,可以忽略COMPILE_WARNING_AS_ERROR
目標屬性和CMAKE_COMPILE_WARNING_AS_ERROR
變數的效果。cmake(1)
--trace=json-v1
追蹤格式增加了global_frame
和line_end
欄位。cmake(1)
-E
指令cat
和env
學會尊重雙破折號 (--
) 引數,它會作為分隔符號,表示選項的結束。任何後續的引數都會被視為運算元/位置引數,即使它們以破折號-
字元開頭。cmake(1)
-E tar
指令增加了--touch
選項,可以保留目前的本機時間戳記,而不是從封存檔中擷取檔案時間戳記。
編譯器¶
在某些平台上,現在支援 LLVM 的 flang Fortran 編譯器,其編譯器 ID 為
LLVMFlang
。
ADSP 編譯器支援(SHARC 和 Blackfin)現在涵蓋 CCES 和 VDSP++ 安裝,所需的組態現在在編譯器模組本身中完成,而不是在
Generic-ADSP
平台模組中完成。
平台¶
新增了一個專用的
ADSP
平台來取代現有的Generic-ADSP
實作。此功能會自動偵測最新的 CCES/VDSP++ 安裝和編譯器選擇 (cc21k
與ccblkfn
),這會根據CMAKE_SYSTEM_PROCESSOR
變數進行。
指令¶
在 Windows 上,
cmake_host_system_information()
指令增加了QUERY WINDOWS_REGISTRY
模式。請參閱其 查詢 Windows 登錄 章節。cmake_language()
指令增加了一個新的SET_DEPENDENCY_PROVIDER
子指令。設定依賴提供者後,對find_package()
和FetchContent_MakeAvailable()
的呼叫可以透過自訂指令重新導向,該指令可以選擇直接滿足請求、修改處理請求的方式,或將其留給內建實作來滿足。請參閱 依賴提供者。file(DOWNLOAD)
指令增加了RANGE_START
和RANGE_END
選項,可以指定要下載的位元組範圍。這對於下載大型二進位檔案的部分內容非常有用。
變數¶
新增了
新增了
新增了
新增了
新增了
新增了
新增了
新增了
新增了
引入了
新增了
CMAKE_XCODE_XCCONFIG
變數以及對應的XCODE_XCCONFIG
目標屬性,以告知Xcode
產生器處理xcconfig
檔案。
屬性¶
新增了
INTERFACE_LINK_LIBRARIES_DIRECT
和INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE
目標屬性,以表達影響使用者直接連結相依性的使用需求。新增了
INTERFACE_HEADER_SETS_TO_VERIFY
目標屬性,以指定應由VERIFY_INTERFACE_HEADER_SETS
驗證的標頭集。LINK_LIBRARIES
目標屬性現在支援$<LINK_ONLY:...>
產生器運算式。請參閱政策CMP0131
。新增了
VS_DOTNET_STARTUP_OBJECT
目標屬性,以告知 Visual Studio 產生器 在執行程式或專案時應使用哪個啟動類別。當受管理的 .NET 專案中有多個static void Main(string[])
函式簽名可用時,這是必要的。
模組¶
ExternalProject
模組的ExternalProject_Add()
命令新增了一個DOWNLOAD_EXTRACT_TIMESTAMP
選項,用於控制在使用URL
下載方法時,是否將解壓縮內容的時間戳記設定為與封存檔中的時間戳記相符。新增了政策CMP0135
,以預設啟用此選項。FetchContent
模組和find_package()
命令現在支援整合功能FetchContent_MakeAvailable()
現在可以嘗試透過先呼叫find_package()
來滿足相依性。新的FETCHCONTENT_TRY_FIND_PACKAGE_MODE
變數控制是否預設對所有相依性執行此操作、是否每個相依性都選擇加入,或完全停用。find_package()
可以重新路由以改為呼叫FetchContent_MakeAvailable()
。新的唯讀CMAKE_FIND_PACKAGE_REDIRECTS_DIR
變數指向一個目錄,其中可以找到組態套件檔案,以方便這些重新路由的呼叫。
FindJNI
模組現在提供匯入的目標。FindMatlab
模組的matlab_add_mex()
函式新增了NO_IMPLICIT_LINK_TO_MATLAB_LIBRARIES
選項,以停用 MATLAB 程式庫的自動連結。FindVulkan
模組現在支援元件,除了 Vulkan SDK 標頭和程式庫之外,還可以選擇要尋找哪些 VulkanSDK 工具和程式庫。FindZLIB
新增了一個ZLIB_USE_STATIC_LIBS
變數,僅搜尋靜態程式庫。
產生器運算式¶
新增了
LINK_LIBRARY
產生器運算式,以管理在連結步驟期間如何指定程式庫。CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>
和CMAKE_LINK_LIBRARY_USING_<FEATURE>
變數用於定義LINK_LIBRARY
產生器運算式可使用的功能。此外,LINK_LIBRARY_OVERRIDE
和LINK_LIBRARY_OVERRIDE_<LIBRARY>
目標屬性可用於解決不相容的功能。當以
Apple
平台為目標時,LINK_LIBRARY
產生器運算式可以透過各種方式連結框架。新增了以下功能FRAMEWORK
NEEDED_FRAMEWORK
REEXPORT_FRAMEWORK
WEAK_FRAMEWORK
當以
Apple
平台為目標時,LINK_LIBRARY
產生器運算式可以透過各種方式連結程式庫。新增了以下功能NEEDED_LIBRARY
REEXPORT_LIBRARY
WEAK_LIBRARY
LINK_LIBRARY
產生器表達式新增了WHOLE_ARCHIVE
功能,可強制載入靜態程式庫中的所有成員。此功能在以下目標平台上受支援:所有
Apple
變體Linux
所有
BSD
變體SunOS
Windows
CYGWIN
MSYS
新增了
LINK_GROUP
產生器表達式,用於管理連結步驟中程式庫的分組。CMAKE_<LANG>_LINK_GROUP_USING_<FEATURE>
和CMAKE_LINK_GROUP_USING_<FEATURE>
變數用於定義可與LINK_GROUP
產生器表達式一起使用的功能。此版本定義了RESCAN
功能,該功能可用於在使用 Linux、BSD、SunOS 工具鏈和 Windows GNU 工具鏈時處理靜態程式庫之間的循環參考。新增了
PATH
產生器表達式,用於管理路徑。新增了
PATH_EQUAL
產生器表達式,用於管理路徑比較。新增了
TARGET_BUNDLE_DIR_NAME
產生器表達式,用於評估給定套件目標的套件目錄名稱。
CTest¶
ctest(1)
新增了--test-output-truncation
選項 (以及對應的CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION
變數),用於指定達到最大測試輸出大小後要使用的截斷模式。可能的值為tail
(預設值)、middle
或head
。
CPack¶
CPack WIX 產生器
新增了一個新變數CPACK_WIX_ARCHITECTURE
,用於指定安裝程式的架構,以支援在 ARM 上執行 Windows 的電腦。CPack 現在支援
CPACK_THREADS
選項,用於使用 libarchive 3.6 或更高版本編譯時的zstd
壓縮。它受 cmake.org 上提供的官方 CMake 二進位檔案支援。
已棄用和移除的功能¶
CPack
模組在CPack DragNDrop 產生器
中預設不再啟用 SLA。請參閱原則CMP0133
和CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE
變數。已棄用的
CPack PackageMaker 產生器
已被移除。FindGLUT
模組不再提供未公開的文件變數GLUT_LIBRARY
和GLUT_INCLUDE_PATH
。FindVulkan
模組不再在find_package(Vulkan REQUIRED ...)
呼叫中靜默忽略請求的未知元件。隨著對元件支援的增加,現在請求未知元件會產生錯誤。
其他變更¶
在組建目錄中的第一次 CMake 執行期間啟用對應的語言時,CMake 不再設定像
CC
、CXX
等環境變數。請參閱原則CMP0132
。CheckIPOSupported
模組的check_ipo_supported()
命令現在使用呼叫者的CMAKE_<LANG>_FLAGS
和CMAKE_<LANG>_FLAGS_<CONFIG>
值。請參閱原則CMP0138
。當未明確指定編譯器時,
MSYS Makefiles
和MinGW Makefiles
產生器現在會選擇在PATH
環境變數所列目錄中找到的第一個編譯器 (任何名稱)。try_compile()
命令的 整個專案 簽名現在會傳播平台變數。請參閱原則CMP0137
。cmake.org 上提供的預編譯 macOS 二進位檔案不再將 SLA 附加到
.dmg
套件。這是因為 macOS 12 已棄用用於附加.dmg
資源的工具。cmake.org 上現在提供了預編譯的 Windows
arm64
二進位檔案。
更新¶
自 CMake 3.24.0 以來所做的變更包括以下內容。
3.24.1, 3.24.2¶
這些版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新以支援生態系統的變更和/或修復回歸問題。
3.24.3¶
在 3.24.0 中加入的
LLVMFlang
Fortran 編譯器支援已擴展現在它支援 Fortran 與 C 或 CXX 之間的混合語言連結。
現在它在 Windows 上支援 GNU ABI (MinGW),但尚未支援 MSVC ABI。
進行了一些實作更新以支援生態系統的變更和/或修復回歸問題。
3.24.4¶
此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新以支援生態系統的變更和/或修復回歸問題。