CMake 4.0 發行說明¶
自 CMake 3.31 以來所做的變更包括以下內容。
新功能¶
基於檔案的 API¶
cmake-file-api(7)
"codemodel" 版本 2version
欄位已更新為 2.8。cmake-file-api(7)
"codemodel" 版本 2 "target" 物件新增了debugger
欄位。
命令列¶
新增了
cmake --link-no-warning-as-error
選項,以抑制LINK_WARNING_AS_ERROR
目標屬性和CMAKE_LINK_WARNING_AS_ERROR
變數的效果。新增了
cmake --project-file
選項,以指定CMakeLists.txt
檔案的替代檔名。這旨在供開發人員在漸進式轉換期間臨時使用,而不是為了發布最終產品。當專案檔不是CMakeLists.txt
時,CMake 始終會發出警告。
命令¶
target_link_libraries()
命令現在支援LINKER:
前綴。
變數¶
當目標或主機系統為 AIX 時,
AIX
和CMAKE_HOST_AIX
變數現在設定為 true。連結器旗標變數學習支援
LINKER:
前綴請參閱政策
CMP0181
。新增了
CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL
變數,以指定execute_process()
命令的預設COMMAND_ERROR_IS_FATAL
行為。新增了
CMAKE_<LANG>_LINK_MODE
和CMAKE_<LANG>_DEVICE_LINK_MODE
變數,以提供有關連結步驟如何完成的資訊。新增了
CMAKE_LINK_WARNING_AS_ERROR
變數和相應的LINK_WARNING_AS_ERROR
目標屬性,以便使用連結器特定的旗標進行連結,將警告視為錯誤。引入了
CMAKE_MSVC_RUNTIME_CHECKS
變數和MSVC_RUNTIME_CHECKS
目標屬性,以選擇以 MSVC ABI 為目標的編譯器的執行階段檢查。請參閱政策CMP0184
。新增了
CMAKE_POLICY_VERSION_MINIMUM
變數,以幫助封裝者和最終使用者嘗試配置尚未更新以使用支援的 CMake 版本的現有專案。新增了CMAKE_POLICY_VERSION_MINIMUM
環境變數來初始化它。新增了
CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
變數和相應的XCODE_SCHEME_LLDB_INIT_FILE
目標屬性,以告訴Xcode
產生器在 scheme 的 "LLDB Init File" 設定中放入什麼。新增了
CMAKE_XCODE_SCHEME_TEST_CONFIGURATION
變數和相應的XCODE_SCHEME_TEST_CONFIGURATION
目標屬性,以告訴Xcode
產生器在 scheme 的測試動作的 "Build Configuration" 設定中放入什麼。
屬性¶
新增了
DEBUGGER_WORKING_DIRECTORY
目標屬性和相應的CMAKE_DEBUGGER_WORKING_DIRECTORY
變數,以告訴產生器應該為目標設定什麼除錯器工作目錄。STATIC_LIBRARY_OPTIONS
目標屬性現在支援ARCHIVER:
前綴,以可移植的方式通過編譯器驅動程式將選項傳遞給封存器。Swift_MODULE_DIRECTORY
目標屬性現在支援產生器運算式
。新增了
VS_CUSTOM_COMMAND_DISABLE_PARALLEL_BUILD
原始檔屬性,以告訴 Visual Studio 產生器 不要並行執行自訂命令。新增了
VS_SOLUTION_ITEMS
目錄屬性,以告訴 Visual Studio 產生器 將檔案直接附加到方案 (.sln
)。
模組¶
ExternalData
模組獲得了ExternalData_HTTPHEADERS
變數以指定 HTTP 標頭。ExternalProject
模組的ExternalProject_Add()
命令獲得了INSTALL_JOB_SERVER_AWARE
選項,以便在使用帶有 Makefile 產生器 的明確INSTALL_COMMAND
時,能夠整合 GNU Make job server。FeatureSummary
模組add_feature_info()
命令現在支援完整的 條件語法。請參閱政策CMP0183
。FindBISON
模組bison_target()
命令獲得了OPTIONS
選項,以指定 Bison 命令列選項。FindCURL
模組現在提供CURL_VERSION
結果變數,以匹配上游 cURL 的 CMake 套件。FindFLEX
模組flex_target()
命令獲得了OPTIONS
選項,以指定 Flex 命令列選項。FindProtobuf
模組protobuf_generate()
命令獲得了PROTOC_EXE
選項,以指定自訂protoc
可執行檔。FindPython
、FindPython2
和FindPython3
模組獲得了在同一目錄中執行多次呼叫的可能性,方法是分別使用變數Python_ARTIFACTS_PREFIX
、Python2_ARTIFACTS_PREFIX
和Python3_ARTIFACTS_PREFIX
。FindRuby
模組學習尋找 rbenv 提供的安裝。
產生器運算式¶
$<PATH>
產生器運算式獲得了NATIVE_PATH
操作,以將 CMake 路徑轉換為原生路徑。
CTest¶
Windows 上的
ctest --interactive-debug-mode
選項現在預設在測試程序中啟用 Windows 錯誤報告,允許它們建立除錯彈出視窗和核心傾印。這還原了先前由 CMake 3.11 移除的行為,在libuv
的更新使其成為可能之後。
CPack¶
CPack 封存產生器
學習產生不壓縮的.tar
套件。CPack 封存產生器
現在適用於所有套件的CPACK_ARCHIVE_FILE_NAME
變數。以前,此變數僅適用於基於組件的套件。
已棄用和移除的功能¶
已移除與舊於 3.5 的 CMake 版本的相容性。現在,對
cmake_minimum_required()
或cmake_policy()
的呼叫,如果將政策版本設定為較舊的值,則會發出錯誤。請注意,對這些命令的呼叫仍然可以通過使用其VERSION
參數的<min>...<max>
語法來支援較舊版本的 CMake。這僅需要<min>
版本的 CMake,但是當運行較新版本時,會將政策設定為<max>
版本。Visual Studio 14 2015
和Visual Studio 15 2017
產生器不再支援將平台指定為產生器名稱的一部分。請參閱 Visual Studio 平台選擇。不再使用
CMAKE_<LANG>_USING_LINKER_MODE
變數來確定CMAKE_<LANG>_USING_LINKER_<TYPE>
變數內容的類型。而是使用由 CMake 設定的CMAKE_<LANG>_LINK_MODE
變數。FindGDAL
模組現在已棄用,建議使用上游 GDAL 的官方 CMake 套件組態檔。通過呼叫find_package(GDAL CONFIG)
將專案移植到後者。有關更多詳細資訊,請參閱 GDAL 關於 CMake 整合的文件。已移除 CTest 未記錄的宣告式腳本模式。此模式過去由不調用任何 CTest 命令 的
ctest -S
腳本觸發,除非CTEST_RUN_CURRENT_SCRIPT
明確設定為OFF
。ctest_run_script()
命令可能不再在沒有任何參數的情況下調用。
其他變更¶
在 macOS 上,使用 Ninja 產生器 和 Makefile 產生器,當在
/usr/bin
中找到編譯器時,現在按原樣使用,不再映射到 Xcode 內部的相應編譯器。映射由 CMake 3.2 引入,以允許建置樹繼續使用其原始編譯器,即使xcode-select
切換到不同的 Xcode 安裝也是如此。但是,沒有明確的-isysroot
旗標,Xcode 內部的編譯器無法使用,因此不適合傳遞給任意第三方建置系統。此外,映射行為可能會覆蓋使用者指定的編譯器路徑。因此,此行為已還原。以 macOS 為目標的建置預設不再選擇任何 SDK 或將
-isysroot
旗標傳遞給編譯器。相反,編譯器預計會自行選擇預設的 macOS SDK。為了使用不這樣做的編譯器,使用者現在必須在配置他們的建置時指定-DCMAKE_OSX_SYSROOT=macosx
。在 AIX 上,
SHARED
程式庫目標現在預設產生共享程式庫封存檔。請參閱政策CMP0182
。預設情況下,
cmake --preset
命令不再輸出預設的 CMake 快取和環境變數摘要。該摘要現在僅在訊息日誌層級設定為VERBOSE
、DEBUG
或TRACE
時顯示,可透過cmake --log-level
選項或CMAKE_MESSAGE_LOG_LEVEL
快取變數來設定。現在 cmake.org 上提供了預編譯的 SunOS
sparc64
和x86_64
二進位檔案。