CMake 3.24 發行說明¶
自 CMake 3.23 以來所做的變更包括以下內容。
新功能¶
預設集¶
cmake-presets(7)
檔案現在支援 schema 版本5
。cmake-presets(7)
檔案現在支援${pathListSep}
巨集,它會根據平台展開為:
或;
。cmake-presets(7)
檔案新增了在測試預設集中指定testOutputTruncation
欄位的支援,該欄位指定達到最大測試輸出大小後的截斷模式。
產生器¶
Green Hills MULTI
產生器現在會產生建置規則,以便在任何 CMake 檔案更新時重新執行 CMake。Visual Studio 產生器 現在在使用 VS 2019 Update 11 或更高版本時支援
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
,以指定要下載的位元組範圍。這對於下載大型二進位檔案的部分內容非常有用。find_file()
、find_path()
、find_library()
、find_program()
和find_package()
命令新增了NO_CMAKE_INSTALL_PREFIX
選項,以控制搜尋CMAKE_INSTALL_PREFIX
。find_file()
、find_path()
、find_library()
、find_program()
和find_package()
命令新增了指定必須查詢哪些 Windows 登錄檢視的功能。find_package()
命令新增了GLOBAL
選項,允許在find_package()
呼叫期間將匯入的目標提升到全域範圍。
變數¶
新增了
CMAKE_COLOR_DIAGNOSTICS
變數,以控制編譯器產生的彩色診斷訊息。此變數也使用 Makefile 產生器 控制彩色建置系統訊息,取代CMAKE_COLOR_MAKEFILE
。新增了
CMAKE_COLOR_DIAGNOSTICS
環境變數,以設定CMAKE_COLOR_DIAGNOSTICS
的預設值。新增了
CMAKE_COMPILE_WARNING_AS_ERROR
變數和對應的COMPILE_WARNING_AS_ERROR
目標屬性,以啟用使用編譯器特定的旗標進行編譯,將警告視為錯誤,例如-Werror
。CMAKE_CUDA_ARCHITECTURES
變數和相關聯的CUDA_ARCHITECTURES
目標屬性現在支援特殊的native
值,以便為主機 GPU 的架構進行編譯。新增了
CMAKE_FIND_PACKAGE_TARGETS_GLOBAL
變數,以切換find_package()
命令的新GLOBAL
選項的行為。新增了
CMAKE_FIND_USE_INSTALL_PREFIX
變數,以切換find_file()
、find_library()
、find_path()
、find_package()
和find_program()
命令的新NO_CMAKE_INSTALL_PREFIX
選項的行為。新增了
CMAKE_PROJECT_TOP_LEVEL_INCLUDES
變數,以允許在第一個project()
呼叫的位置注入自訂程式碼,在確定主機和目標平台詳細資訊之後。新增了
CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES
變數,以告知try_compile()
命令不要將任何平台變數傳遞到測試專案。新增了
CMAKE_VERIFY_INTERFACE_HEADER_SETS
變數和對應的VERIFY_INTERFACE_HEADER_SETS
目標屬性,以啟用建置規則,驗證標頭集中的所有標頭是否可以單獨使用。新增了
CMAKE_VS_NO_COMPILE_BATCHING
變數和對應的VS_NO_COMPILE_BATCHING
目標屬性,以告知 Visual Studio 產生器 是否停用編譯器平行處理,並一次使用一個原始碼檔案呼叫編譯器。新增了
CMAKE_WATCOM_RUNTIME_LIBRARY
變數和WATCOM_RUNTIME_LIBRARY
目標屬性,以選擇以 Watcom ABI 為目標的編譯器所使用的執行階段程式庫。請參閱政策CMP0136
。新增了
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
變數指向一個目錄,config 套件檔案可以位於該目錄中,以方便這些重新路由的呼叫。
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 Generator
獲得了一個新的變數CPACK_WIX_ARCHITECTURE
,以指定安裝程式架構,從而支援在 Windows for ARM 上執行的電腦。CPack 現在支援
CPACK_THREADS
選項,用於在使用 libarchive 3.6 或更高版本編譯時的zstd
壓縮。官方 CMake 二進位檔案在 cmake.org 上提供支援。
已棄用和移除的功能¶
CPack
模組在CPack DragNDrop Generator
中不再預設啟用 SLA。請參閱政策CMP0133
和CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE
變數。已移除已棄用的
CPack PackageMaker Generator
。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()
命令的 whole-project 簽章現在會傳播平台變數。請參閱政策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¶
此版本未對已記錄的功能或介面進行任何變更。進行了一些實作更新,以支援生態系統變更和/或修復回歸。