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()
主體內的ARGC
和ARGV#
變數中讀取引數。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_ORDER
和CMAKE_FIND_PACKAGE_SORT_DIRECTION
,依NAME
或NATURAL
排序對相容的程式庫進行排序。if()
命令獲得了新的布林比較運算子LESS_EQUAL
、GREATER_EQUAL
、STRLESS_EQUAL
、STRGREATER_EQUAL
、VERSION_LESS_EQUAL
和VERSION_GREATER_EQUAL
。install()
命令獲得了一個EXPORT_ANDROID_MK
子命令,用於安裝Android.mk
檔案,將已安裝的程式庫引用為 Android NDK 建置系統的預先建置。string(TIMESTAMP)
和file(TIMESTAMP)
命令獲得了對%a
和%b
佔位符的支援。這些是縮寫的星期幾和月份名稱。try_compile()
命令原始碼檔案簽章現在在產生的測試專案中採用組態特定的旗標 (例如CMAKE_<LANG>_FLAGS_DEBUG
)。先前僅使用了目前工具鏈的預設此類旗標。請參閱策略CMP0066
。
變數¶
新增了變數
CMAKE_FIND_PACKAGE_SORT_ORDER
以控制find_package()
命令的排序模式。新增了變數
CMAKE_FIND_PACKAGE_SORT_DIRECTION
以控制find_package()
命令的排序方向。工具鏈 檔案
現在可以設定CMAKE_<LANG>_FLAGS_INIT
變數,以在建置樹狀結構中首次啟用語言時初始化CMAKE_<LANG>_FLAGS
快取項目。工具鏈 檔案
現在可以設定CMAKE_EXE_LINKER_FLAGS_INIT
、CMAKE_SHARED_LINKER_FLAGS_INIT
和CMAKE_MODULE_LINKER_FLAGS_INIT
變數,以在建置樹狀結構中首次啟用語言時初始化CMAKE_EXE_LINKER_FLAGS
、CMAKE_SHARED_LINKER_FLAGS
和CMAKE_MODULE_LINKER_FLAGS
快取項目。
屬性¶
在 Apple 平台上,
BUNDLE_EXTENSION
目標屬性現在也適用於 Frameworks 和 App Bundles。新增了
BINARY_DIR
目錄屬性,以取得與讀取屬性的來源目錄對應的二進位目錄的絕對路徑。新增了
BUILDSYSTEM_TARGETS
目錄屬性,以取得專案在目錄中新增的邏輯建置系統目標名稱清單。引入了
LINK_WHAT_YOU_USE
目標屬性和支援的CMAKE_LINK_WHAT_YOU_USE
變數,以偵測 (在 UNIX 上) 已連結但執行ldd -r -u
不需要的共用程式庫。新增了
SOURCE_DIR
目錄屬性,以取得與目錄關聯的來源目錄的絕對路徑。新增了
SUBDIRECTORIES
目錄屬性,以取得專案在目錄中新增的子目錄清單。新增了
VS_SDK_REFERENCES
目標屬性,以告知 Visual Studio 產生器 引用指定的 SDK。建立了一個
VS_TOOL_OVERRIDE
原始碼檔案屬性,以告知 Visual Studio 產生器 要為原始碼檔案使用哪個工具。WINDOWS_EXPORT_ALL_SYMBOLS
目標屬性現在適用於設定了ENABLE_EXPORTS
屬性的可執行目標。新增了
XCODE_FILE_ATTRIBUTES
原始碼檔案屬性,以告知Xcode
產生器在檔案的 Xcode 專案屬性中產生自訂內容。
模組¶
新增了
AndroidTestUtilities
模組,以管理測試資料傳輸到 Android 裝置。CheckFortranSourceCompiles
模組巨集CHECK_Fortran_SOURCE_COMPILES
獲得了一個SRC_EXT
選項,用於指定自訂的測試 Fortran 原始碼檔案副檔名。ExternalProject
模組獲得了HTTP_USERNAME
和HTTP_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_exports
和export_jars
函數。
CTest¶
CTest 現在透過新的
FIXTURES_SETUP
、FIXTURES_CLEANUP
和FIXTURES_REQUIRED
測試屬性來支援測試夾具。當使用正則表達式或--rerun-failed
來限制要執行的測試時,如果任何測試需要該夾具,則夾具的設定和清理測試將自動新增到執行集中。ctest_configure()
、ctest_build()
、ctest_test()
、ctest_coverage()
和ctest_upload()
命令獲得了一個新的CAPTURE_CMAKE_ERROR
選項,用於捕獲命令執行時發生的任何錯誤到變數中,並避免影響ctest(1)
程序的傳回碼。
CPack¶
CPack 在 OS X 上獲得了
CPack productbuild 產生器
。CPack 獲得了一個新的
CPACK_PACKAGE_CHECKSUM
變數,以啟用為每個封裝檔案產生總和檢查碼檔案。CPack DEB 產生器
學會在將歸檔格式設定為 GNU tar 時支援長檔案名稱。請參閱CPACK_DEBIAN_ARCHIVE_TYPE
CPackIFW
模組獲得了一個新的cpack_ifw_add_package_resources()
命令,以在安裝程式二進位檔案中包含其他資源。CPackIFW
模組cpack_ifw_configure_component()
和cpack_ifw_configure_component_group()
命令獲得了一個新的USER_INTERFACES
選項,用於將其他頁面的清單新增至 IFW 安裝程式。CPack RPM 產生器
學會按需產生 debuginfo 封裝。請參閱CPACK_RPM_DEBUGINFO_PACKAGE
及其每個組件版本。CPack RPM 產生器
學會按需產生原始碼 rpm (SRPM) 封裝。請參閱CPACK_RPM_PACKAGE_SOURCES
、CPACK_RPM_SOURCE_PKG_BUILD_PARAMS
和CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX
。CPack NSIS 產生器
現在支援CPACK_NSIS_<compName>_INSTALL_DIRECTORY
。這可以用於設定組件特定的安裝目錄。CPack WIX 產生器
現在支援CPACK_WIX_SKIP_PROGRAM_FOLDER
,以允許指定 ProgramFiles 資料夾外部的自訂絕對安裝前置詞。CPack WIX 產生器
現在支援CPACK_COMPONENT_<compName>_DISABLED
。這可以用於取消選取預設要安裝的組件。CPack WIX 產生器
現在支援 Feature 元素的CPACK_WIX_PATCH_FILE
片段。現在
CPack WIX Generator
支援CPACK_WIX_ROOT_FEATURE_TITLE
和CPACK_WIX_ROOT_FEATURE_DESCRIPTION
,以允許指定根功能元素的自訂標題和描述。
其他¶
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.vim
、cmake-syntax.vim
和cmake-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.vim
和syntax/cmake.vim
現在隨 CMake 一起發行。