CMake 3.1 發行說明

自 CMake 3.0 以來所做的變更包括以下。

文件變更

新功能

產生器

Windows Phone 和 Windows Store

  • Visual Studio 11 (2012) 及更高版本的產生器學會了為 Windows Phone 和 Windows Store 產生專案。可以在 CMAKE_SYSTEM_NAME 變數設定為 WindowsPhoneWindowsStore,在 cmake(1) 命令列或在 CMAKE_TOOLCHAIN_FILE 中啟用這些平台。同時將 CMAKE_SYSTEM_VERSION 設定為 8.08.1 來指定目標 Windows 版本。

NVIDIA Nsight Tegra

  • Visual Studio 10 (2010) 及更高版本的產生器學會了為 NVIDIA Nsight Tegra Visual Studio Edition 產生專案。可以在 CMAKE_SYSTEM_NAME 變數設定為 Android,在 cmake(1) 命令列或在 CMAKE_TOOLCHAIN_FILE 中啟用此平台。

語法

指令

變數

  • Visual Studio 產生器(適用於 8 (2005) 及以上版本)學會從新的 CMAKE_GENERATOR_PLATFORM 變數讀取目標平台名稱,當平台名稱未指定為產生器名稱的一部分時。平台名稱可以在 cmake(1) 命令列中使用 -A 選項指定,例如 -G "Visual Studio 12 2013" -A x64

  • CMAKE_GENERATOR_TOOLSET 變數現在可以在由 CMAKE_TOOLCHAIN_FILE 變數指定的工具鏈檔案中初始化。這在使用 Xcode 或 Visual Studio 產生器進行交叉編譯時很有用。

  • 引入 CMAKE_INSTALL_MESSAGE 變數,以便選擇性地減少安裝輸出。

屬性

模組

其他

  • cmake(1) -E 選項新增了 env 命令。

  • cmake(1) -E tar 命令學習支援 lzma 壓縮檔案。

  • 物件程式庫現在可以擁有額外的原始碼,這些原始碼不會編譯成物件檔案,只要它們不會影響一般程式庫的連結(例如,.dat 可以,但 .def 不行)。

  • 適用於 VS 8 及更新版本的 Visual Studio 產生器學習支援 ASM_MASM 語言。

  • Visual Studio 產生器學習將 .hlsl 原始碼檔案視為高階著色語言原始碼(在 .vcxproj 檔案中使用 FXCompile)。新增了原始碼檔案屬性 VS_SHADER_TYPEVS_SHADER_MODELVS_SHADER_ENTRYPOINT,以指定著色器類型、模型和進入點名稱。

新的診斷

已棄用和移除的功能

  • 在 CMake 3.0 中,target_link_libraries() 命令意外開始允許未加引號的參數使用包含以(; 分隔)列表的 產生器 表達式。例如

    set(libs B C)
    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:${libs}>)
    

    這等同於寫入

    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:B C>)
    

    而且從未打算要這樣運作。它在 CMake 2.8.12 中無法運作。此類產生器表達式應放在帶引號的參數中

    set(libs B C)
    target_link_libraries(A PUBLIC "$<BUILD_INTERFACE:${libs}>")
    

    CMake 3.1 再次要求使用引號才能使其正確運作。

  • 在 CMake 3.1 之前,Makefile 產生器並未正確逸出在產生之 makefile 中使用的 make 變數指派內的 #,導致它們被視為註解。這使得如下程式碼

    add_compile_options(-Wno-#pragma-messages)
    

    在 Makefile 產生器中無法運作,但在其他產生器中可以運作。現在它已正確逸出,使行為在各個產生器中保持一致。但是,有些專案可能已嘗試使用如下程式碼來解決原始錯誤

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-\\#pragma-messages")
    

    這為 Makefile 產生器新增了所需的逸出,但也導致其他產生器將 -Wno-\#pragma-messages 傳遞給 shell,這僅在 POSIX shell 中有效。不幸的是,無法以相容的方式進行逸出修復,因此這種平台和產生器特定的變通方法不再有效。專案程式碼可以測試 CMAKE_VERSION 變數值,以使變通方法也具有版本特定性。

  • 當設定未記錄的 CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS 變數時,variable_watch() 命令建立的回呼將不再接收 ALLOWED_UNKNOWN_READ_ACCESS 存取類型。未初始化的變數存取將一律回報為 UNKNOWN_READ_ACCESS

  • CMakeDetermineVSServicePack 模組現在警告說它已棄用,不應再使用。請改用 CMAKE_<LANG>_COMPILER_VERSION 變數。

  • 已完全移除 FindITK 模組。它是 find_package(ITK ... NO_MODULE) 周圍的薄包裝函式。當找不到 ITK 時,這會產生更清晰的錯誤訊息。

  • 已完全移除 FindVTK 模組。它是 find_package(VTK ... NO_MODULE) 周圍的薄包裝函式。當找不到 VTK 時,這會產生更清晰的錯誤訊息。

    該模組還提供尋找 VTK 4.0 的相容性支援。此功能已捨棄。

其他變更

  • cmake-gui(1) 學習擷取由 execute_process() 命令啟動的子進程的輸出,並將其顯示在輸出視窗中。

  • 已最佳化 cmake-language(7) 的產生器表達式和清單展開剖析器的內部實作,並在大型專案上顯示出顯著的加速。

  • Makefile 產生器學習在 Windows 上使用 GNU 工具的回應檔,將程式庫目錄和名稱傳遞給連結器。

  • 產生連結器命令列時,CMake 現在會避免重複對應於 SHARED 程式庫目標的項目。

  • 對 Open Watcom 編譯器的支援已全面翻新。CMAKE_<LANG>_COMPILER_ID 現在是 OpenWatcom,而 CMAKE_<LANG>_COMPILER_VERSION 現在使用 Open Watcom 的外部版本編號。外部版本號比內部版本號低 11。

  • cmake-mode.el 這個 Emacs 主要編輯模式不再將 _ 視為單字的一部分,使其與其他主要模式更加一致。