CMake 3.17 發行說明¶
CMake 3.16 以來所做的變更包括以下內容。
新功能¶
產生器¶
cmake(1)
獲得了Ninja Multi-Config
產生器,它與Ninja
產生器相似,但可用於一次建構多個組態。Visual Studio 產生器 學會了支援每個組態的來源。 以前只有 命令列建構工具產生器 支援它們。
適用於 VS 2010 及更高版本的 Visual Studio 產生器 現在支援在
CMAKE_GENERATOR_TOOLSET
設定中指定專案檔的VCTargetsPath
值。適用於 VS 2010 及更高版本的 Visual Studio 產生器 學會了支援 .NET Standard 和 .NET Core。 請參閱
DOTNET_TARGET_FRAMEWORK
目標屬性和相關聯的CMAKE_DOTNET_TARGET_FRAMEWORK
變數。
程式語言¶
編譯 功能
功能現在為 CUDA 語言標準層級(例如cuda_std_03
、cuda_std_14
)提供元功能。 請參閱CMAKE_CUDA_KNOWN_FEATURES
。
編譯器¶
現在
Ninja
產生器支援 IBM XL Fortran 編譯器。
命令列¶
命令¶
add_custom_command()
命令學會了解釋DEPENDS
參數中的路徑,這些路徑是相對於目前的二進位目錄指定的。foreach()
命令學到了一個新的ZIP_LISTS
選項,用於同時迭代多個列表。load_cache(READ_WITH_PREFIX)
命令模式現在在使用cmake -P
以 執行腳本 時被允許。message()
命令學會了輸出在CMAKE_MESSAGE_CONTEXT
變數中提供的上下文,用於日誌層級NOTICE
及以下。 使用新的--log-context
命令列選項或CMAKE_MESSAGE_CONTEXT_SHOW
變數啟用此輸出。message()
命令獲得了新的關鍵字CHECK_START
、CHECK_PASS
和CHECK_FAIL
。target_compile_options()
命令現在更一致地遵守BEFORE
關鍵字。 請參閱政策CMP0101
。
變數¶
新增了
CMAKE_CTEST_ARGUMENTS
變數,用於指定在透過產生的建構系統的test
(或RUN_TESTS
)目標執行時傳遞給 CTest 的命令列參數列表。以下變數現在在
function()
內定義引入了
CMAKE_CUDA_RUNTIME_LIBRARY
變數和CUDA_RUNTIME_LIBRARY
目標屬性,以選擇在連結使用 CUDA 的目標時使用的 CUDA 執行時期函式庫。引入了
CMAKE_FIND_DEBUG_MODE
變數,以在 cmake 執行期間向標準錯誤輸出額外的find_*
呼叫資訊。 輸出是為人類消費而設計的,而不是為了解析。CMAKE_EXPORT_COMPILE_COMMANDS
變數現在從CMAKE_EXPORT_COMPILE_COMMANDS
環境變數取得其初始值(如果未給定明確的組態)。如果未明確設定,
CMAKE_<LANG>_COMPILER_LAUNCHER
變數現在從CMAKE_<LANG>_COMPILER_LAUNCHER
環境變數取得其初始值。CMAKE_MESSAGE_LOG_LEVEL
變數現在可用於在 CMake 執行之間持久化日誌層級,這與僅適用於該特定執行的--log-level
命令列選項不同。新增了
CMAKE_XCODE_SCHEME_ENVIRONMENT
變數,以初始化XCODE_SCHEME_ENVIRONMENT
目標屬性。新增了
CMAKE_XCODE_SCHEME_WORKING_DIRECTORY
變數和相關聯的XCODE_SCHEME_WORKING_DIRECTORY
目標屬性,以告知Xcode
產生器設定Custom Working Directory
綱要選項的值。
屬性¶
建立了
AIX_EXPORT_ALL_SYMBOLS
目標屬性和相關聯的CMAKE_AIX_EXPORT_ALL_SYMBOLS
變數,以選擇性地明確停用在 AIX 上從共享函式庫自動匯出符號。新增了
DEPRECATION
目標屬性,以將目標標記為已棄用。 如果連結的目標被標記為已棄用,則在產生時會發出包含棄用訊息的警告。INSTALL_NAME_DIR
目標屬性現在支援產生器 表達式
。 特別是,$<INSTALL_PREFIX>
產生器表達式可用於設定相對於安裝時前綴的目錄。新增了目標屬性
MACHO_COMPATIBILITY_VERSION
和MACHO_CURRENT_VERSION
,以分別設定 Mach-O 二進位檔的compatibility_version
和current_version
。 為了向後相容性,如果未設定這些屬性,則分別使用SOVERSION
和VERSION
作為後備。新增了
VS_DOTNET_DOCUMENTATION_FILE
目標屬性,以告知 Visual Studio 產生器 在.csproj
檔案中產生DocumentationFile
參考。
模組¶
ExternalProject
模組ExternalProject_Add()
命令獲得了GIT_SUBMODULES_RECURSE
選項,以指定是否應遞迴更新 Git 子模組。 預設值為開啟,以保留現有行為。新增了
FindCUDAToolkit
模組,以在不啟用 CUDA 作為程式語言的情況下尋找 CUDA 工具包。FindCURL
模組學會了使用 CURL 的 cmake 建構系統產生的CURLConfig.cmake
套件設定檔來尋找 CURL。 它還獲得了一個新的CURL_NO_CURL_CMAKE
選項,以停用此行為。FindFLEX
模組的FLEX_TARGET
命令現在使用CMAKE_CURRENT_BINARY_DIR
作為工作目錄來執行flex
。 請參閱政策CMP0098
。FindLibArchive
模組現在為 libarchive 提供了一個匯入目標。FindPython
模組已學會在由conda
管理的活動虛擬環境中尋找 Python 組件。FindPython3
和FindPython
模組分別獲得了變數Python3_SOABI
和Python_SOABI
,它們給出了模組的標準擴展名後綴。 此外,命令Python3_add_library()
和Python_add_library()
獲得了選項WITH_SOABI
,以使用SOABI
的值作為函式庫後綴的前綴。FindLibXml2
模組現在為xmllint
可執行檔提供了一個匯入目標。
自動產生¶
CTest¶
CTEST_CONFIGURATION_TYPE
變數現在在ctest(1)
與-C <cfg>
一起調用時從命令列設定。ctest(1)
工具獲得了對 Dr. Memory 的支援,以執行記憶體檢查執行。ctest(1)
工具獲得了一個--no-tests=<[error|ignore]>
選項,以明確設定和統一直接調用和腳本模式之間的行為(如果未找到測試)。ctest(1)
工具獲得了一個--repeat <mode>:<n>
選項,以指定在其中重複測試的條件。 這將現有的--repeat-until-fail <n>
選項推廣為新增了until-pass
和after-timeout
的模式。ctest_test()
命令獲得了一個REPEAT <mode>:<n>
選項,以指定在其中重複測試的條件。
CPack¶
CPack DragNDrop 產生器
學會了使用CPACK_DMG_<component>_FILE_NAME
變數,以在將組件封裝到其自己的 DMG 中時設定自訂檔案名稱。CPack DragNDrop 產生器
學會了處理 RTF 格式的許可證檔案。 當設定CPACK_DMG_SLA_DIR
變數時,會考慮<language>.license.rtf
,但僅在找不到純文字 (.txt
) 檔案時才作為後備,以保持向後相容性。CPack NSIS 產生器
獲得了一個新的變數CPACK_NSIS_MUI_HEADERIMAGE
以設定標頭圖像。 為了不破壞現有的設定,如果未設定新變數,它仍然預設為CPACK_PACKAGE_ICON
。CPack NSIS 產生器
現在支援CPACK_NSIS_UNINSTALL_NAME
。 這可用於指定解除安裝程式的名稱。CPack NSIS 產生器
現在支援CPACK_NSIS_WELCOME_TITLE
和CPACK_NSIS_WELCOME_TITLE_3LINES
。 這些可用於指定歡迎頁面標題並以 3 行顯示它。現在
CPack NSIS Generator
支援CPACK_NSIS_FINISH_TITLE
和CPACK_NSIS_FINISH_TITLE_3LINES
。 這些可以用於指定完成頁面的標題,並以 3 行顯示。CPack productbuild Generator
增加了對CPACK_PRODUCTBUILD_BACKGROUND
變數的支援,以指定 macOS 安裝程式的背景圖片。
其他¶
已棄用和移除的功能¶
為政策
CMP0068
和政策CMP0069
新增了明確的棄用診斷訊息(CMP0067
及更早版本已棄用)。cmake-policies(7)
手冊解釋說,所有政策的 OLD 行為都已棄用,專案應移植到 NEW 行為。CPack
PackageMaker
產生器已被棄用,因為 Xcode 不再發布 PackageMaker 工具。 未記載的OSXX11
產生器也已被棄用。cmake(1)
命令列-E remove
和-E remove_directory
工具已被棄用,取而代之的是新的-E rm
工具。 即使沒有強制選項,較舊的工具在指定的路徑不存在時總是返回 0,並且在不破壞相容性的情況下無法修復,因此已被取代。現在
CPack NSIS Generator
需要 NSIS 3.0 或更高版本。
其他變更¶
file API
索引檔案現在發出multiConfig
標誌,指定產生器是否支援多個輸出組態。目標連結屬性
INTERFACE_LINK_OPTIONS
、INTERFACE_LINK_DIRECTORIES
和INTERFACE_LINK_DEPENDS
現在透過靜態程式庫上的私有依賴項進行傳遞。 請參閱政策CMP0099
。當使用 MinGW 工具時,
find_library()
命令預設不再尋找.dll
檔案。 相反地,它期望.dll.a
匯入程式庫可用。如果環境的
PATH
中存在sh.exe
,MinGW Makefiles
產生器不再發出錯誤。Ninja
產生器現在優先選擇PATH
中出現的第一個 ninja 建置工具,無論它是否被稱為ninja-build
、ninja
或samu
。 以前,會優先選擇這些名稱中第一個出現在PATH
中任何位置的名稱。使用 SDCC 時,
sdar
工具現在比sdcclib
更受青睞作為程式庫管理員。 後者已在 SDCC 3.2.0 中棄用,並在 SDCC 3.8.6 中移除。使用 SDCC 時,預設標誌不再包含任何目標特定的標誌。 以前,預設標誌是針對 8051 硬編碼的。
CMAKE_VS_GLOBALS
變數值現在在編譯器識別期間以及由add_custom_target()
命令建立的目標中套用。Xcode
產生器不再硬編碼-Wmost
、-Wno-four-char-constants
和-Wno-unknown-pragmas
警告標誌。
更新¶
自 CMake 3.17.0 以來所做的變更包括以下內容。
3.17.1¶
CMake 3.17.0 更新了
CPack NSIS Generator
,進行了需要 NSIS 3.0 或更高版本的變更。 CMake 3.17.1 現在強制使用足夠新的版本。
3.17.3¶
如果未設定
OBJC
或OBJCXX
環境變數,則 Objective C 或 C++ 編譯器的選擇現在會考慮CC
或CXX
環境變數。FindPkgConfig
模組現在將以-isystem
為前綴的包含目錄提取到*_INCLUDE_DIRS
變數和INTERFACE_INCLUDE_DIRECTORIES
目標屬性中。 以前,它們會被放置在*_CFLAGS_OTHER
變數和INTERFACE_COMPILE_OPTIONS
目標屬性中。
3.17.5¶
CMAKE_AUTOMOC_PATH_PREFIX
的預設值已變更為OFF
,因為此功能可能會破壞現有的專案,這些專案在不同的包含目錄中具有相同名稱的標頭檔。 這恢復了與 CMake 3.15 及更早版本的行為的相容性。 在 3.16.9 中,預設值也已變更為OFF
。