CMake 3.4 發行說明¶
自 CMake 3.3 以來所做的變更包括以下內容。
新功能¶
產生器¶
Visual Studio 14 2015
產生器學習根據CMAKE_SYSTEM_VERSION
變數的值和主機上可用的 SDK 來選擇 Windows 10 SDK。CMake 學習了對 Apple Swift 語言的基本支援。當使用
Xcode
產生器搭配 Xcode 6.1 或更高版本時,可以使用enable_language()
命令或project()
命令來啟用Swift
語言(對於其他產生器或當 Xcode 版本太舊時,這會發生錯誤)。然後可以在目標中列出.swift
原始檔以進行編譯。
命令¶
find_program()
命令學習了一個NAMES_PER_DIR
選項,以便在移動到下一個目錄之前,先考慮每個目錄中所有給定的NAMES
。get_filename_component()
命令學習了一個新的BASE_DIR
子命令。這用於在從相對路徑計算絕對路徑時指定基礎目錄。if()
命令學習了一個新的TEST
運算子,如果給定的測試名稱已由add_test()
命令定義,則評估為 true。請參閱政策CMP0064
。install(DIRECTORY)
命令DESTINATION
選項學習支援產生器表達式
。install(FILES)
命令DESTINATION
選項學習支援產生器表達式
。string()
命令學習了一個新的APPEND
子命令。
變數¶
Makefile 產生器 和
Ninja
產生器學習為C
和CXX
語言添加編譯器啟動工具,例如 distcc 和 ccache 以及編譯器。請參閱CMAKE_<LANG>_COMPILER_LAUNCHER
變數和<LANG>_COMPILER_LAUNCHER
目標屬性以取得詳細資訊。引入了新的
CMAKE_LINK_SEARCH_START_STATIC
和CMAKE_LINK_SEARCH_END_STATIC
變數,分別用於初始化LINK_SEARCH_START_STATIC
和LINK_SEARCH_END_STATIC
目標屬性。
屬性¶
Visual Studio 產生器 學習支援其他目標屬性,以自訂 NVIDIA Nsight Tegra Visual Studio Edition 的專案
ARCHIVE_OUTPUT_DIRECTORY
、LIBRARY_OUTPUT_DIRECTORY
和RUNTIME_OUTPUT_DIRECTORY
目標屬性學習支援產生器表達式
。SOURCE_DIR
和BINARY_DIR
目標屬性被引入,以允許專案程式碼查詢目標的定義位置。OUTPUT_NAME
目標屬性及其變體學習支援產生器表達式
。新增了
TARGET_MESSAGES
全域屬性,以告知 Makefile 產生器 是否產生命令以在每個目標完成後列印輸出。在具有 MS 相容工具的 Windows 上,CMake 學習可以選擇性地為
SHARED
程式庫產生模組定義 (.def
) 檔案。請參閱WINDOWS_EXPORT_ALL_SYMBOLS
目標屬性。
模組¶
ExternalProject
模組ExternalProject_Add()
函數GIT_SUBMODULES
選項現在也限制了初始化的子模組集合,以及限制更新的子模組集合的先前行為。ExternalProject
模組學習了新的USES_TERMINAL
引數,用於為步驟提供獨佔終端機存取權。這對於Ninja
產生器監視 CMake 超級建置進度和防止 CPU 過度訂閱非常有用。FindBISON
模組BISON_TARGET
巨集學習了一個新的DEFINES_FILE
選項,用於指定要產生的自訂輸出標頭。FindHDF5
模組學習了一個新的HDF5_PREFER_PARALLEL
選項,允許使用者指定如果平行 HDF5 工具都可用,則優先選擇平行工具。FindIce
模組現在提供匯入的目標。FindJava
模組學習可以選擇性地尋找idlj
和jarsigner
工具。FindOpenSSL
模組現在提供匯入的目標。FindOpenSSL
模組學習了一個新的OPENSSL_USE_STATIC_LIBS
選項,僅搜尋靜態程式庫。FindPkgConfig
學習了一個新的pkg_get_variable()
命令,可用於查詢套件中的任意變數(例如相關工具或資料和外掛程式安裝路徑)。FindProtobuf
模組獲得了一個新的protobuf_generate_python()
函數,用於從.proto
檔案產生 python 原始碼。FindTIFF
模組學習分別搜尋偵錯和發行變體。FindwxWidgets
模組學習支援版本請求。FindXercesC
模組學習分別搜尋偵錯和發行變體。FindZLIB
模組學習分別搜尋偵錯和發行變體。GNUInstallDirs
模組根據 GNU 編碼標準 和 檔案系統階層標準,學習某些安裝前綴的特殊預設值。UseJava
模組add_jar
函數學習支援來源規格的回應檔案(例如@srcs.txt
)。UseJava
模組install_jar
函數學習了新的DESTINATION
和COMPONENT
選項,以指定對應的install()
命令選項。UseJava
模組獲得了一個新的create_javah
函數,用於從 Java 類別建立 C 標頭。
產生器表達式¶
新增了一個新的
$<SHELL_PATH:...>
產生器表達式
。
CTest¶
CTest 學習可以選擇性地測量平行測試期間的 CPU 負載,並避免啟動可能導致負載超過給定閾值的測試。請參閱
ctest(1)
命令--test-load
選項、CTest 測試步驟 的TestLoad
設定、CTEST_TEST_LOAD
變數,以及ctest_test()
命令的TEST_LOAD
選項。ctest(1)
學習了--test-output-size-passed
和--test-output-size-failed
選項,以自訂在作為 儀表板用戶端 執行時提交的測試輸出大小限制。
CPack¶
CPack DEB 產生器
學習設定每個組件的套件依賴項。請參閱變數CPack
模組學習封裝空目錄。CPack
模組獲得了一個新的設定CPACK_VERBATIM_VARIABLES
,可用於確保 cpack 程式接收設定的值與設定的值完全相同,即使它們包含 CMake 特殊字元也是如此。為了相容性,預設為關閉。
其他¶
已棄用和移除的功能¶
CMakeExpandImportedTargets
模組現在被記錄為已棄用。請參閱模組文件以取得說明。CMAKE_USE_RELATIVE_PATHS
變數不再有任何作用。先前它只是部分實作且不可靠。
其他變更¶
CheckFunctionExists
、CheckLibraryExists
、CheckSymbolExists
和FindThreads
模組學習在僅啟用 CXX 的環境中工作。CPack DEB 產生器
現在在套件總和檢查碼計算期間正確排除符號連結。CPack DEB 產生器
不再使用 fakeroot 和系統 tar 程式進行封裝。CPack
模組不再使用 CMake 特殊字元來損壞設定,當它們用作其他設定的預設值時。巨集cpack_set_if_not_set
負責此操作,現在已被棄用。除非設定了
ENABLE_EXPORTS
目標屬性,否則 CMake 不再使用匯出符號的旗標連結可執行檔。請參閱政策CMP0065
。不再為使用
add_library()
命令建立的MODULE
程式庫設定SONAME
欄位。MODULE
程式庫旨在用於執行時的明確動態載入。它們無法連結,因此SONAME
沒有用處。內部
CMAKE_<LANG>_COMPILE_OBJECT
規則變數現在將編譯器包含旗標替換為單獨的<INCLUDES>
佔位符,而不是主要的<FLAGS>
佔位符。