CMake 3.14 發行說明

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

新功能

產生器

  • 已新增 Visual Studio 16 2019 產生器。這是實驗性的,並且基於「Visual Studio 2019 Preview 4」,因為此版本的 VS 尚未發布。

    VS 2019 產生器與早期版本的產生器不同之處在於,它不提供在產生器名稱中指定目標平台的變體。而是必須使用 CMAKE_GENERATOR_PLATFORM,例如透過 -A 命令列選項。此外,預設目標平台(架構)現在基於 _host_ 平台。VS host 工具組選取現在也基於 host 架構。

  • 已更新 Green Hills MULTI 產生器

    • 現在支援 物件程式庫

    • 現在會針對不支援的專案類型(例如共用程式庫)發出警告。

    • 現在會為每個呼叫 project() 指令的目錄產生最上層的 <PROJECT-NAME>.top.gpj。不再建立最上層的專案檔案 default.gpj

    • 現在會遵守目標重新命名和目的地輸出控制屬性,例如 RUNTIME_OUTPUT_DIRECTORYOUTPUT_NAME。這也修正了 install() 所產生的安裝規則的支援。

    • 現在會遵守來源檔案屬性 INCLUDE_DIRECTORIESCOMPILE_DEFINITIONSCOMPILE_OPTIONS

    • 現在支援動態下載完整性應用程式,這些應用程式不包含透過 GHS_INTEGRITY_APP 整合檔案,並設定目標連結旗標 -dynamic

    • 專案檔案的內容現在會依名稱排序來源群組和檔案。將 GHS_NO_SOURCE_GROUP_FILE 目標屬性設定為 ON,以針對目標產生單一專案檔案,而不是針對每個來源群組產生專案檔案。設定 CMAKE_GHS_NO_SOURCE_GROUP_FILE 變數,以便為所有目標啟用此功能。

基於檔案的 API

  • 已新增基於檔案的 API,供用戶端取得語義建置系統資訊。請參閱 cmake-file-api(7) 手冊。此 API 旨在取代 IDE 的 cmake-server(7) 模式。

平台

命令列

  • cmake(1) 建置工具模式 (cmake --build) 新增了 --verbose-v 選項,以指定詳細的建置輸出。某些產生器(例如 Xcode)目前不支援此選項。

  • cmake(1) -E compare_files 指令新增了 --ignore-eol 選項,以指定在比較檔案時應忽略行尾差異 (例如 LF 與 CRLF)。

  • cmake-gui(1) 對話方塊新增了 -S-B 引數,以明確指定來源和建置目錄。

指令

  • file() 指令新增了一個子指令 CREATE_LINK,可用於建立硬連結或符號連結。

  • file() 指令新增了一個子指令 READ_SYMLINK,可用於判斷符號連結指向的路徑。

  • file() 指令新增了一個 SIZE 模式,以取得檔案在磁碟上的大小。

  • find_package() 指令已學會選擇性地解析套件組態檔案路徑中的符號連結。請參閱 CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS 變數。

  • get_filename_component() 指令新增了 LAST_EXTNAME_WLE 變體,以使用名稱中最後一個 . 後面的副檔名。

  • if() 指令新增了支援,可使用 DEFINED CACHE{VAR} 語法檢查是否定義了快取變數。

  • install(CODE)install(SCRIPT) 指令已學會支援產生器表達式。請參閱原則 CMP0087

變數

屬性

模組

  • FetchContent模組新增了 FetchContent_MakeAvailable()命令。它接受一個相依性名稱的列表,然後迭代這些名稱,使用標準模式填充每個名稱並將其添加到主建置中。這大大減少了專案中所需的樣板程式碼量。

  • FindBISON模組BISON_TARGET 命令現在會以 CMAKE_CURRENT_BINARY_DIR為工作目錄來執行 bison。請參閱原則 CMP0088

  • FindCURL模組已支援將協定作為套件元件請求。

  • 新增了 FindFontconfig模組以尋找 fontconfig

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

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

  • FindGit模組現在為 Git 可執行檔提供匯入的目標。

  • FindIce模組學會尋找 slice2confluenceslice2matlab

  • 新增了 FindLibinput模組以尋找 libinput

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

  • FindMatlab模組新增了選項 R2017bR2018a 以指定要使用的 MEX API 版本;這些選項對應 MATLAB R2018a 中 mex 命令的新選項。不再需要 MX_LIBRARY 選項。

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

  • FindPython模組FindPython2模組FindPython3模組已支援 NumPy 元件。

  • FindPython2模組FindPython3模組FindPython模組現在支援以指令碼模式執行,方法是跳過匯入目標和輔助函式的建立。

  • 新增了 FindSQLite3模組以尋找 SQLite v3.x 程式庫。

  • FindX11模組的下列變數已重新命名,以便與其程式庫名稱而非標頭名稱相符。為了相容性,仍提供舊變數

    • X11_Xxf86misc_INCLUDE_PATH 而非 X11_xf86misc_INCLUDE_PATH

    • X11_Xxf86misc_LIB 而非 X11_xf86misc_LIB

    • X11_Xxf86misc_FOUND 而非 X11_xf86misc_FOUND

    • X11_Xxf86vm_INCLUDE_PATH 而非 X11_xf86vmode_INCLUDE_PATH

    • X11_Xxf86vm_LIB 而非 X11_xf86vmode_LIB

    • X11_Xxf86vm_FOUND 而非 X11_xf86vmode_FOUND

    • X11_xkbfile_INCLUDE_PATH 而非 X11_Xkbfile_INCLUDE_PATH

    • X11_xkbfile_LIB 而非 X11_Xkbfile_LIB

    • X11_xkbfile_FOUND 而非 X11_Xkbfile_FOUND

    • X11_Xtst_INCLUDE_PATH 而非 X11_XTest_INCLUDE_PATH

    • X11_Xtst_LIB 而非 X11_XTest_LIB

    • X11_Xtst_FOUND 而非 X11_XTest_FOUND

    • X11_Xss_INCLUDE_PATH 而非 X11_Xscreensaver_INCLUDE_PATH

    • X11_Xss_LIB 而非 X11_Xscreensaver_LIB

    • X11_Xss_FOUND 而非 X11_Xscreensaver_FOUND

    由於下列變數基本上是重複的,因此已完全棄用

    • X11_Xinput_INCLUDE_PATH (請使用 X11_Xi_INCLUDE_PATH)

    • X11_Xinput_LIB (請使用 X11_Xi_LIB)

    • X11_Xinput_FOUND (請使用 X11_Xi_FOUND)

  • FindX11模組現在提供 X11_Xext_INCLUDE_PATH

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

  • UseSWIG模組學會將 -module <module_name> 傳遞給 SWIG 編譯器,如果定義了檔案屬性 SWIG_MODULE_NAME。請參閱原則 CMP0086

  • UseSWIG模組新增了一個選項來指定 SWIG 原始檔副檔名。

產生器運算式

  • 新增了 $<Fortran_COMPILER_ID:...>$<Fortran_COMPILER_VERSION:...> 產生器表達式

  • $<IN_LIST:...> 產生器表達式現在能正確處理空參數。詳情請參閱 CMP0085

自動產生

CTest

  • ctest(1) 新增了 --show-only=json-v1 選項,以機器可讀的 JSON 格式顯示測試清單。請參閱手冊的 以 JSON 物件模型顯示 區段。

  • ctest_submit() 命令新增了一個 Done 部分,可用於通知 CDash 建置已完成且不會再上傳任何部分。

  • CTest 現在可以從單一變數接受儀表板伺服器提交 URL。請參閱 ctest(1) 中的 SubmitURL 設定、CTEST_SUBMIT_URL 變數,以及 ctest_submit() 命令的 SUBMIT_URL 引數。

已棄用和移除的功能

  • 針對策略 CMP0064CMP0065 新增了明確的棄用診斷(CMP0063 及以下的策略已遭棄用)。cmake-policies(7) 手冊說明了所有策略的舊行為皆已棄用,專案應移植到新行為。

  • Xcode 產生器已棄用對 Xcode 5 之前版本的支援。對這些版本的支援將在未來版本的 CMake 中移除。

  • FindQt 模組不再由 find_package() 命令作為尋找模組使用。這允許 Qt Project 上游選擇性地提供其自身的 QtConfig.cmake 套件組態檔,並讓應用程式透過 find_package(Qt) 而非 find_package(Qt CONFIG) 來使用它。請參閱策略 CMP0084

  • 已移除在 Windows XP 和 Windows Vista 上執行 CMake 的支援。在 cmake.org 上提供的預先編譯 Windows 二進位檔現在需要 Windows 7 或更高版本。

  • CTest 不再支援透過 ftpscpcpxmlrpc 提交。CDash 是 CTest 唯一維護的測試儀表板,且僅支援透過 httphttps 提交。

其他變更

更新

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

3.14.1

  • 3.14.0 新增的 FindFontconfig 模組,意外地使用了不符合我們慣例的大寫 FONTCONFIG_* 變數名稱。3.14.1 版本修正了此模組,改用 Fontconfig_* 變數名稱。這與 3.14.0 版本不相容,但由於此模組在 3.14 系列中是新的,因此使用應該還不廣泛。

3.14.3

3.14.4

  • 在 CMake 3.14.0 到 3.14.3 版本中,呼叫 target_link_libraries() 以將 PRIVATE 相依性新增至另一個目錄中建立的靜態程式庫(在政策 CMP0079 NEW 行為下),會不正確地將這些相依性的使用需求傳播給連結靜態程式庫的依賴項目。此問題已修正。此錯誤也存在於 3.13.0 到 3.13.4 版本中,並已在 3.13.5 版本中修正。

3.14.5

3.14.6

  • 在 CMake 3.14.0 到 3.14.5 版本中,FindBISON 模組政策 CMP0088 NEW 行為,意外地將 .y 輸入的相對路徑,解讀為相對於建置樹狀目錄,而不是來源樹狀目錄。此問題已修正。

3.14.7

  • 在 CMake 3.14.0 到 3.14.6 版本中,EXCLUDE_FROM_ALL 目錄屬性從 3.14 之前的行為回歸,並導致目錄中的目標,即使從其自己的 "all" 中也被排除。此問題已修正。