CMake 3.10 發行說明¶
自 CMake 3.9 以來所做的變更包括以下內容。
新功能¶
平台¶
現在支援 flang Fortran 編譯器,編譯器 ID 為
Flang
。新增了
Midipix
的新最小平台檔案。新增了對 MSVC ARM64 架構的支援。Visual Studio 2017 Update 4 及更高版本提供 ARM64 工具鏈。
改進了對 IAR ARM 編譯器的支援。
產生器¶
Makefile 產生器和
Ninja
產生器學會在CUDA
語言的編譯器旁添加像是 ccache 的編譯器啟動工具(先前已支援C
和CXX
)。請參閱CMAKE_<LANG>_COMPILER_LAUNCHER
變數和<LANG>_COMPILER_LAUNCHER
目標屬性以了解詳細資訊。CodeBlocks
額外產生器學會了可選擇性地將專案根目錄外部的檔案排除在產生的專案之外。請參閱CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
變數。
命令¶
cmake_host_system_information()
命令學會了更多索引鍵,以取得關於處理器功能和主機作業系統版本的資訊。configure_file()
命令學會了支援縮排的# cmakedefine
和# cmakedefine01
。現在會理解並在輸出中保留#
字元和cmakedefine
/cmakedefine01
字詞之間的空格和/或 Tab 字元。execute_process()
命令新增了RESULTS_VARIABLE
選項,以便在提供多個COMMAND
引數時,從處理程序管道中的所有子處理程序收集結果清單。引入了
include_guard()
命令,以便防止多次包含 CMake 指令碼。該命令支援DIRECTORY
和GLOBAL
選項,以調整對應的包含保護範圍。如果沒有提供任何選項,包含保護類似於基本的變數式檢查。string()
命令學會了新的PREPEND
子命令。string(TIMESTAMP)
命令現在支援以%A
表示完整的星期幾名稱,並以%B
表示完整的月份名稱。
變數¶
新增了
CMAKE_DIRECTORY_LABELS
變數,以指定目錄中所有測試的標籤。
屬性¶
引入了
<LANG>_CPPCHECK
目標屬性和支援的CMAKE_<LANG>_CPPCHECK
變數,以告知 Makefile 產生器和Ninja
產生器使用C
和CXX
語言的編譯器來執行cppcheck
。新增了
LABELS
目錄屬性,以指定目錄中所有目標和測試的標籤。新增了
TEST_INCLUDE_FILES
目錄屬性,以列出在使用ctest(1)
執行測試時要包含的任意數量檔案。這概括了TEST_INCLUDE_FILE
屬性。新增了
VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>
目標屬性,以支援 C# 目標中參考組件的自訂 XML 標籤。已新增來源檔案屬性
VS_SHADER_OUTPUT_HEADER_FILE
和VS_SHADER_VARIABLE_NAME
,以使用 Visual Studio 產生器指定.hlsl
來源的更多詳細資訊。
模組¶
FindCurses
模組新增了CURSES_NEED_WIDE
選項,以請求寬字元變體。FindEXPAT
模組現在提供已匯入的目標。FindFreetype
模組現在提供已匯入的目標。FindMPI
新增了許多新功能,包括已將特定語言的元件新增到模組中。
現在支援更多 MPI 環境。
改進了對 Fortran 的環境支援。
使用者現在可以精細地控制 MPI 選擇流程,包括將自訂參數傳遞至 MPI 編譯器。
現在會公開已實作的 MPI 標準版本。
現在可以偵測到 MPI-2 C++ 繫結,如果需要也可以抑制。
現在會偵測並驗證可用的 Fortran 繫結。
可以要求各種 MPI-3 資訊,包括個別繫結的程式庫版本和 Fortran 功能。
支援靜態連結的 MPI 實作。
新增了
FindOpenACC
模組,用於偵測編譯器對 OpenACC 的支援。目前僅支援 PGI、GNU 和 Cray 編譯器。FindOpenGL
模組在 Linux 上增加了對 GLVND 的支援。FindOpenMP
模組增加了對特定語言元件的支援。新增了
FindPatch
模組,用於尋找patch
命令列執行檔。FindProtobuf
模組的protobuf_generate_cpp()
命令新增了DESCRIPTORS
選項,用於產生描述符檔案。GoogleTest
模組新增了一個命令gtest_discover_tests()
,實作動態(建置時)測試探索。與來源程式碼解析方法不同,動態探索會在建置時執行測試(以「列出可用測試」模式),以探索測試。這對於標記測試的不尋常方法具有更強的穩健性,為參數化測試等進階功能提供了更好的支援,並且不需要重新執行 CMake 即可探索測試執行檔中新增或移除的測試。請注意,CMake 3.10.3 中進行了一項重大變更,以解決TIMEOUT
關鍵字的含糊不清之處(請參閱 3.10.3)。InstallRequiredSystemLibraries
模組增加了對安裝 Intel 編譯器執行階段的支援。
Autogen¶
當使用
AUTOMOC
或AUTOUIC
搭配多重組態產生器(例如Xcode
)時,包含的*.moc
、moc_*.cpp
和ui_*.h
檔案會在<AUTOGEN_BUILD_DIR>/include_<CONFIG>
中產生,而不是在<AUTOGEN_BUILD_DIR>/include
中產生。當使用
AUTOMOC
或AUTOUIC
時,GENERATED
的來源檔案也會被處理。這些檔案在先前的版本中會被AUTOMOC
和AUTOUIC
忽略。請參閱原則CMP0071
。當使用
AUTOMOC
時,CMake 會在原始檔中搜尋字串Q_OBJECT
、Q_GADGET
或Q_NAMESPACE
,以判斷是否需要進行moc
處理。新的CMAKE_AUTOMOC_MACRO_NAMES
變數和AUTOMOC_MACRO_NAMES
目標屬性可以設定為註冊其他要搜尋的字串(巨集名稱)。當使用
AUTOMOC
時,新的CMAKE_AUTOMOC_COMPILER_PREDEFINES
變數和AUTOMOC_COMPILER_PREDEFINES
目標屬性指定是否啟用或停用編譯器預先定義檔案moc_predefs.h
的產生。
CTest¶
新增了
CTEST_LABELS_FOR_SUBPROJECTS
CTest 模組變數和 CTest 腳本變數,用於指定應由 CDash 視為子專案的標籤清單。若要在 CTest 模組和 ctest 命令列 儀表板用戶端 模式(例如ctest -S
)中使用此值,請在CTestConfig.cmake
組態檔中設定它。
CPack¶
新增了用於 FreeBSD
pkg(8)
的CPack FreeBSD 產生器
。在 Windows 上啟用了
CPack DEB 產生器
。雖然功能不完整(由於缺少外部 UNIX 工具),這將允許建置基本的跨平台 Debian 套件。CPack DEB 產生器
學會在Version
資訊屬性中設定套件發行版本。請參閱CPACK_DEBIAN_PACKAGE_RELEASE
變數。CPack DEB 產生器
學會了更嚴格的套件版本檢查,符合 Debian 規則。CPackIFW
模組的cpack_ifw_configure_component()
和cpack_ifw_configure_component_group()
命令新增了REPLACES
和CHECKABLE
選項。
其他¶
graphviz 輸出現在區分了不同的相依類型
已棄用和已移除的功能¶
已取消使用 C++98 編譯器建置 CMake 本身的支援。CMake 現在使用 C++11 實作。
已取消在 HP-UX 上建置 CMake 的支援,等待更好的 C++11 支援和 libuv 的移植。請參閱 CMake Issue 17137。對於 HP-UX 支援,請改用 CMake 3.9 或更低版本。
其他變更¶
在 FreeBSD 上,名為
c++
的 C++ 編譯器現在是首選的預設值。
更新¶
自 CMake 3.10.0 以來所做的變更包括以下內容。
3.10.1¶
3.10.3¶
CMake 3.10.1 從