CMake 3.10 發行說明

自 CMake 3.9 以來所做的變更包括以下內容。

新功能

平台

  • 現在支援 flang Fortran 編譯器,編譯器 ID 為 Flang

  • 新增了適用於 Midipix 的新最小平台檔案。

  • 新增了對 MSVC ARM64 架構的支援。Visual Studio 2017 Update 4 及更高版本提供 ARM64 工具鏈。

  • 改進了對 IAR ARM Compiler 的支援。

產生器

命令

  • cmake_host_system_information() 命令學會了更多鍵來取得有關處理器功能和主機作業系統版本的資訊。

  • configure_file() 命令學會了支援縮排的 #  cmakedefine#  cmakedefine01。現在可以理解並保留 # 字元和 cmakedefine/cmakedefine01 字詞之間的空格和/或 Tab 字元。

  • execute_process() 命令獲得了 RESULTS_VARIABLE 選項,可在給定多個 COMMAND 引數時,從程序管線中的所有子程序收集結果清單。

  • 引入了 include_guard() 命令,以防止 CMake 腳本被多次包含。此命令支援 DIRECTORYGLOBAL 選項,以調整對應的包含保護範圍。如果未提供任何選項,則包含保護類似於基本的基於變數的檢查。

  • string() 命令學會了新的 PREPEND 子命令。

  • string(TIMESTAMP) 命令現在支援 %A 表示完整的工作日名稱,以及 %B 表示完整的月份名稱。

變數

屬性

模組

  • 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

CTest

  • 新增了 CTEST_LABELS_FOR_SUBPROJECTS CTest 模組變數和 CTest 腳本變數,以指定應由 CDash 視為子專案的標籤清單。若要在 CTest 模組和 ctest 命令列 儀表板用戶端 模式(例如 ctest -S)中使用此值,請在 CTestConfig.cmake 設定檔中設定它。

CPack

其他

  • cmake(1) -E 模式增加了對 sha1sumsha224sumsha256sumsha384sumsha512sum 的支援。

  • graphviz 輸出現在區分了不同的相依性類型 PUBLICPRIVATEINTERFACE,並在輸出圖中將它們表示為實線、虛線和點線邊緣。

已棄用和移除的功能

  • 已刪除使用 C++98 編譯器建置 CMake 本身的支援。CMake 現在使用 C++11 實作。

  • 已刪除在 HP-UX 上建置 CMake 的支援,等待更好地支援 C++11 和 libuv 的移植。請參閱 CMake Issue 17137。對於 HP-UX 支援,請改用 CMake 3.9 或更低版本。

其他變更

  • 在 FreeBSD 上,名為 c++ 的 C++ 編譯器現在是首選預設編譯器。

  • file(GENERATE) 命令現在分別針對呼叫者的目前二進位和來源目錄,解譯提供給其 OUTPUTINPUT 引數的相對路徑。請參閱政策 CMP0070

  • get_filename_component() PROGRAM 模式語意已修訂為不容忍程式路徑中未加引號的空格,同時也接受引數。雖然在技術上與舊行為不相容,但預計在使用正確加引號的命令列的典型用例下的行為沒有改變。

更新

自 CMake 3.10.0 以來所做的變更包括以下內容。

3.10.1

  • cmake-server(7) codemodel 回應交叉參考欄位(由 3.10.0 新增)已因過度記憶體使用量而刪除。將需要另一種方法來提供回溯資訊。

3.10.3

  • CMake 3.10.1 為 gtest_discover_tests()(來自 GoogleTest 模組)新增了 TIMEOUT 選項。該關鍵字與 TIMEOUT 測試屬性衝突,後者是通常會使用命令的 PROPERTIES 關鍵字設定的常見屬性之一,通常會導致合法但非預期的行為。在 CMake 3.10.3 中,關鍵字已變更為 DISCOVERY_TIMEOUT 以解決此問題。gtest_discover_tests() 命令的 TIMEOUT 關鍵字在 3.10.1 和 3.10.2 中的模糊行為未被保留。