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 產生器是否要產生在每個目標完成後列印輸出的命令。在 Windows 上使用 MS 相容工具時,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>
佔位符中。