CMake 3.7 發行說明

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

新功能

平台

  • CMake 現在支援使用簡單工具鏈檔案為 Android 交叉編譯

  • AIX 現在支援 Clang 編譯器。

產生器

  • Ninja 產生器學會在使用具有必要功能的 ninja 工具時有條件地支援 Fortran。請參閱產生器文件以了解詳細資訊。

  • Ninja 產生器學會產生 sub/dir/{test,install,package} 形式的虛擬目標,以驅動子目錄安裝、測試或封裝目標的建置。這相當於使用 Makefile 產生器cd sub/dir; make {test,install,package}

  • Visual Studio 15 2017 產生器已新增。這是實驗性的,並且基於 "Visual Studio 2017 RC",因為此版本的 VS 尚未發布。

  • 適用於 VS 2010 及更高版本的 Visual Studio 產生器 學會正確地將 .natvis 原始檔放入 VS 專案檔中。

  • Xcode 產生器的基本 Swift 語言支援學會採用新的 CMAKE_Swift_LANGUAGE_VERSION 變數,以告知 Xcode 原始碼使用的 Swift 版本。

  • CodeLite 產生器獲得了一個新的 CMAKE_CODELITE_USE_TARGETS 選項,可將專案建立從專案變更為目標。

命令

  • add_custom_command() 命令獲得了一個新的 DEPFILE 選項,該選項與 Ninja 產生器一起使用,以向建置工具提供隱含的相依性資訊。

  • cmake_parse_arguments() 命令獲得了一個新的 PARSE_ARGV 模式,可直接從 function() 主體內的 ARGCARGV# 變數中讀取引數。

  • export() 命令獲得了一個 ANDROID_MK 選項,用於產生 Android.mk 檔案,將 CMake 建置的程式庫引用為 Android NDK 建置系統的預先建置。

  • file(DOWNLOAD)file(UPLOAD) 命令獲得了 HTTPHEADER <HTTP-header>USERPWD <username>:<password> 選項。

  • find_library()find_package() 命令學會在建置目標為 32 位元架構時搜尋 lib32/ 目錄。請參閱 FIND_LIBRARY_USE_LIB32_PATHS 全域屬性。

  • find_package() 命令可以透過設定兩個新變數 CMAKE_FIND_PACKAGE_SORT_ORDERCMAKE_FIND_PACKAGE_SORT_DIRECTION,依 NAMENATURAL 排序對相容的程式庫進行排序。

  • if() 命令獲得了新的布林比較運算子 LESS_EQUALGREATER_EQUALSTRLESS_EQUALSTRGREATER_EQUALVERSION_LESS_EQUALVERSION_GREATER_EQUAL

  • install() 命令獲得了一個 EXPORT_ANDROID_MK 子命令,用於安裝 Android.mk 檔案,將已安裝的程式庫引用為 Android NDK 建置系統的預先建置。

  • string(TIMESTAMP)file(TIMESTAMP) 命令獲得了對 %a%b 佔位符的支援。這些是縮寫的星期幾和月份名稱。

  • try_compile() 命令原始碼檔案簽章現在在產生的測試專案中採用組態特定的旗標 (例如 CMAKE_<LANG>_FLAGS_DEBUG)。先前僅使用了目前工具鏈的預設此類旗標。請參閱策略 CMP0066

變數

屬性

模組

  • 新增了 AndroidTestUtilities 模組,以管理測試資料傳輸到 Android 裝置。

  • CheckFortranSourceCompiles 模組巨集 CHECK_Fortran_SOURCE_COMPILES 獲得了一個 SRC_EXT 選項,用於指定自訂的測試 Fortran 原始碼檔案副檔名。

  • ExternalProject 模組獲得了 HTTP_USERNAMEHTTP_PASSWORD 選項,以設定 http 下載憑證。

  • ExternalProject 模組獲得了一個 HTTP_HEADER 選項,以新增 http 下載標頭。

  • FindBISON 模組 BISON_TARGET 巨集學會了一個新的 REPORT_FILE 選項,用於指定 bison --report-file= 選項。

  • FindBZip2 模組現在提供匯入的目標。

  • 引入了一個 FindICU 模組,用於尋找 Unicode 國際組件 (ICU) 程式庫和程式。

  • FindMatlab 模組學會尋找 SIMULINK 和 MAT 組件。

  • FindMatlab 模組 matlab_add_mex() 命令學會新增可執行檔和模組。

  • FindMatlab 模組 matlab_add_unit_test() 命令學會支援內嵌 Matlab 測試程式碼。

  • FindOpenCL 模組現在提供匯入的目標。

  • FindOpenMP 模組學會從編譯器偵測 OpenMP 版本 (規格日期)。

  • 新增了 FindVulkan 模組。

  • GenerateExportHeader 模組學會了一個新的 CUSTOM_CONTENT_FROM_VARIABLE 選項,用於指定包含要包含在產生的標頭中的自訂內容的變數。

  • GNUInstallDirs 模組獲得了一個新的 GNUInstallDirs_get_absolute_install_dir() 命令。

  • UseJava 模組獲得了用於「匯出」jar 目標以供外部 CMake 專案使用的 API。請參閱 install_jar_exportsexport_jars 函數。

CTest

CPack

其他

  • cmake(1) 新增了 -E capabilities 選項,以提供 cmake 工具功能(可用的產生器等)的機器可讀(JSON)描述。

  • 新增了 cmake-server(7) 模式,以透過 JSON 協定向客戶端提供有關 CMake 產生的建置系統的語意資訊。目前所有協定均為實驗性質,如有更改,恕不另行通知。

  • cmake(1) 命令學習了 --trace-source=<file> 選項。

  • ccmake(1) 學習支援類似 vim 的導航綁定。

  • cmake-gui(1) 新增了一個按鈕,用於為 Visual Studio 產生器Xcode 產生器開啟產生的專案檔案。

已棄用和移除的功能

  • 我們不再從 cmake.org 為新版本的 CMake 提供 Linux i386 二進制檔案下載。

  • Vim 支援檔案 cmake-indent.vimcmake-syntax.vimcmake-help.vim 已被移除,以支持現在從 vim-cmake-syntax 專案提供的檔案。

  • 已停止支援使用某些編譯器建置 CMake 本身

    • Visual Studio 7.1 和 2005 -- 已被 VS 2008 及更高版本取代

    • MinGW.org mingw32 -- 已被 MSYS2 mingw32 和 mingw64 取代

    CMake 仍然支援使用這些編譯器為其他專案產生建置系統。

其他變更

  • Fortran 相依性掃描器學習支援 Fortran Submodules 的語法。

  • 來自 vim-cmake-syntax 專案的 Vim 支援檔案 indent/cmake.vimsyntax/cmake.vim 現在隨 CMake 一起發行。