CMake 3.31 版本說明¶
自 CMake 3.30 以來所做的變更包含以下內容。
新功能¶
預設值¶
cmake-presets(7)
檔案現在可以在 JSON 物件內的任何層級使用$comment
鍵來包含註解,以提供文件。cmake-presets(7)
檔案現在可以使用配置預設中的graphviz
鍵來請求 graphviz 輸出。
產生器¶
Ninja 產生器 和 Makefile 產生器 現在會產生
codegen
建置目標。請參閱原則CMP0171
。它會驅動建置圖的一個子集,足以運行使用add_custom_command()
的新CODEGEN
選項建立的自訂命令。
命令列¶
cmake --workflow
模式現在接受預設名稱作為第一個引數,允許更簡單的命令列cmake --workflow <預設值>
。新增了
cmake -LR[A][H]
選項,以列出名稱與正規表示式相符的快取項目。
編譯器¶
現在支援 LFortran 編譯器,並使用
編譯器 id
LFortran
。
指令¶
add_custom_command()
指令新增了CODEGEN
選項,以將自訂命令的輸出標記為codegen
目標的相依性。請參閱原則CMP0171
。新增了
cmake_pkg_config()
指令,作為使用 CMake 原生 pkg-config 格式剖析器的端點。此版本中唯一支援的選項是EXTRACT
,它提供對剖析 pkg-config 檔案所產生值的低階存取。對於大多數使用者來說,這還不是FindPkgConfig
模組的合適替代方案。file(ARCHIVE_CREATE)
指令新增了WORKING_DIRECTORY
選項,以指定封存程序的工作目錄。file(MAKE_DIRECTORY)
指令新增了RESULT
選項,以在結果變數中擷取失敗。install(FILES)
和install(DIRECTORY)
指令的TYPE
引數新增了對LIBEXEC
類型的支援。
變數¶
新增了
CMAKE_AIX_SHARED_LIBRARY_ARCHIVE
變數和對應的AIX_SHARED_LIBRARY_ARCHIVE
目標屬性,以在 AIX 上建立共用程式庫作為共用程式庫封存檔。新增了
CMAKE_EXPORT_BUILD_DATABASE
變數、對應的CMAKE_EXPORT_BUILD_DATABASE
環境變數和EXPORT_BUILD_DATABASE
目標屬性,以啟用匯出 C++ 模組編譯指令。這僅支援 Ninja 產生器。新增了
CMAKE_HOST_EXECUTABLE_SUFFIX
變數,以提供主機平台上可執行檔名稱的後綴。新增了
CMAKE_<LANG>_HOST_COMPILER_ID
和CMAKE_<LANG>_HOST_COMPILER_VERSION
變數,其中<LANG>
是CUDA
或HIP
。當CMAKE_<LANG>_COMPILER_ID
是NVIDIA
時,它們會被填入,以識別 NVCC 的主機編譯器。新增了
CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES
變數。工具鏈檔案可以設定此變數,以控制哪些連結程式庫目錄路徑始終傳遞給指定語言的編譯器。新增了
CMAKE_LINK_LIBRARIES_STRATEGY
變數和對應的LINK_LIBRARIES_STRATEGY
目標屬性,以選擇性地指定 CMake 用於產生連結行的策略。
屬性¶
新增了
MACOSX_FRAMEWORK_BUNDLE_NAME
目標屬性,以在 AppleFRAMEWORK
的Info.plist
檔案中設定CFBundleName
鍵。UNITY_BUILD
目標屬性現在支援CUDA
語言。新增了
VS_FRAMEWORK_REFERENCES
目標屬性,以告知 Visual Studio 產生器 新增架構參考。
模組¶
檢查模組現在支援
CMAKE_REQUIRED_LINK_DIRECTORIES
變數。以下模組新增了此支援CMakePackageConfigHelpers
模組的generate_apple_platform_selection_file()
函式新增了對 iOS Mac Catalyst 的支援。GoogleTest
模組的gtest_discover_tests()
命令新增了一個DISCOVERY_EXTRA_ARGS
關鍵字。它允許在查詢測試列表時將額外的參數附加到命令列。FindCUDAToolkit
模組現在提供一個CUDA::nvml_static
目標。FindOpenMP
模組新增了對CUDA
語言的支援。
CTest¶
ctest_submit()
命令和ctest -T Submit
步驟現在預設會驗證連線到https://
URL 的 TLS 伺服器憑證。詳情請參閱CTEST_TLS_VERIFY
變數。ctest_submit()
命令和ctest -T Submit
步驟現在預設要求連線到https://
URL 時使用 TLS 1.2 或更高版本。詳情請參閱CTEST_TLS_VERSION
變數。
CPack¶
CPack DEB Generator
新增了CPACK_DEBIAN_PACKAGE_MULTIARCH
選項,以支援多架構套件。CPack IFW Generator
新增了CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS
變數,以指定與CPACK_IFW_PACKAGE_PRODUCT_IMAGES
條目相關的圖片。此功能適用於 QtIFW 4.0 及更高版本。這個
CPack RPM 產生器
支援將zstd
作為CPACK_RPM_COMPRESSION_TYPE
的值。預設情況下,
CPack
模組在CPack WIX 產生器
中啟用每個機器的安裝。請參閱原則CMP0172
和CPACK_WIX_INSTALL_SCOPE
變數。
已棄用和移除的功能¶
現在已棄用與 CMake 3.10 之前版本的相容性,並將在未來版本中移除。呼叫
cmake_minimum_required()
或cmake_policy()
將原則版本設定為舊值時,現在會發出棄用診斷訊息。已透過
CMP0173
棄用CMakeFindFrameworks
模組。專案應改用find_library()
。已移除
Visual Studio 12 2013
產生器。
其他變更¶
當連結行上的靜態函式庫被重複資料刪除時(依據原則
CMP0156
),現在在所有平台上都會保留第一次出現的位置。請參閱原則CMP0179
。現在會由以下項目保留
TEST_LAUNCHER
和CROSSCOMPILING_EMULATOR
目標屬性中的空白清單元素add_test()
命令。來自
ExternalData
模組的ExternalData_Add_Test()
命令。來自
GoogleTest
模組的gtest_add_tests()
和gtest_discover_tests()
命令。現在也會保留這兩個命令的EXTRA_ARGS
關鍵字之後的空白清單元素。
請參閱原則
CMP0178
。execute_process()
命令的ENCODING
選項(在 Windows 上有意義)現在預設為UTF-8
。請參閱原則CMP0176
。現在預設情況下,
file(DOWNLOAD)
和file(UPLOAD)
命令會針對與https://
URL 的連線驗證 TLS 伺服器憑證。請參閱CMAKE_TLS_VERIFY
變數以瞭解詳細資訊。此變更是在沒有原則的情況下進行的,以便即使在建置尚未更新的專案時,也能保護使用者。使用者可以將CMAKE_TLS_VERIFY
環境變數設定為0
,以還原舊的預設值。現在預設情況下,
file(DOWNLOAD)
和file(UPLOAD)
命令要求與https://
URL 連線時使用 TLS 1.2 或更高版本。請參閱CMAKE_TLS_VERSION
變數以瞭解詳細資訊。已更新
file(GET_RUNTIME_DEPENDENCIES)
命令,以更緊密地符合 Linux 上動態載入器的行為。現在會將
install()
命令的DESTINATION
引數正規化,但install(TARGETS)
中的INCLUDES DESTINATION
引數除外。請參閱原則CMP0177
。現在
project()
命令會總是設定<PROJECT-NAME>_SOURCE_DIR
、<PROJECT-NAME>_BINARY_DIR
和<PROJECT-NAME>_IS_TOP_LEVEL
為一般變數和快取條目。請參閱政策CMP0180
。現在
cmake_parse_arguments(PARSE_ARGV)
命令會為單一值關鍵字之後的空字串定義一個變數。請參閱政策CMP0174
。