CMake 3.12 發行說明¶
自 CMake 3.11 以來所做的變更包括以下內容。
新功能¶
產生器¶
用於 VS 2017 的 Visual Studio 產生器 學會支援
CMAKE_GENERATOR_TOOLSET
值中的version=14.##
選項(例如,透過cmake(1)
-T
選項),以指定工具組版本號。
命令列¶
命令¶
新增了
add_compile_definitions()
命令,以在目錄層級設定前處理器定義。這取代了add_definitions()
。cmake_minimum_required()
和cmake_policy(VERSION)
命令現在接受使用<min>[...<max>]
形式的版本範圍。<min>
版本是必需的,但政策是根據正在執行的 CMake 版本和<max>
指定的版本中較舊的版本設定的。這允許專案指定它們已更新的版本範圍,並避免明確的政策設定。file(GLOB)
和file(GLOB_RECURSE)
命令新增了一個新的旗標CONFIGURE_DEPENDS
,它允許表達建置系統對 glob 目錄內容的依賴性。新增了
file(TOUCH)
和file(TOUCH_NOCREATE)
命令,以公開TOUCH
功能,而無需使用 CMake 的命令列工具模式和execute_process()
。find_package()
命令現在搜尋由<PackageName>_ROOT
CMake 變數和<PackageName>_ROOT
環境變數指定的字首。套件根目錄維護為堆疊,因此在 find 模組內對所有find_*
命令的巢狀呼叫也會將根目錄作為字首搜尋。請參閱政策CMP0074
。install()
命令新增了一個可選的NAMELINK_COMPONENT
參數,允許您變更共用程式庫符號連結的組件。如果未指定,則預設使用COMPONENT
的值。list()
命令新增了一個JOIN
子命令,用於串連由膠合字串分隔的清單元素。list()
命令新增了一個SUBLIST
子命令,用於取得清單的子清單。list()
命令新增了一個TRANSFORM
子命令,用於對清單的元素應用各種字串轉換。project()
命令新增了一個可選的HOMEPAGE_URL
參數,其效果是設定類似PROJECT_HOMEPAGE_URL
、<PROJECT-NAME>_HOMEPAGE_URL
和CMAKE_PROJECT_HOMEPAGE_URL
的變數。string()
命令新增了一個JOIN
子命令,用於串連由膠合字串分隔的輸入字串。target_compile_options()
和add_compile_options()
命令新增了SHELL:
字首,以使用類似 shell 的引號指定一組相關選項。target_link_libraries()
命令現在支援 物件程式庫。連結到物件程式庫會在直接依賴項中使用其物件檔案,並傳播使用需求。
變數¶
新增了
CMAKE_FOLDER
變數,以初始化所有目標上的FOLDER
屬性。定義了
CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
變數,以初始化所有DOTNET_TARGET_FRAMEWORK_VERSION
目標屬性。引入了
CMAKE_PROJECT_VERSION*
變數擴展了
CMAKE_SUPPRESS_REGENERATION
變數,以支援Ninja
和 Makefile 產生器。現在也已記錄在案。定義了
CMAKE_VS_SDK_*_DIRECTORIES
變數,以告知 VS 2010 及更高版本的 Visual Studio 產生器 如何在指定 SDK 目錄的.vcxproj
檔案中填入欄位。變數為新增了
MSVC_TOOLSET_VERSION
變數,以在MSVC_VERSION
中提供與目前 MSVC 編譯器版本相關聯的 MSVC 工具組版本。
屬性¶
引入了
COMMON_LANGUAGE_RUNTIME
目標屬性,以設定 VS 2010 及更高版本的 Visual Studio 產生器 的 Managed C++ 用法。新增了對應的IMPORTED_COMMON_LANGUAGE_RUNTIME
目標屬性,以支援匯入目標的C++/CLI
。引入了
DOTNET_TARGET_FRAMEWORK_VERSION
目標屬性,以取代現在被視為已棄用的VS_DOTNET_TARGET_FRAMEWORK_VERSION
。新增了
EXPORT_PROPERTIES
目標屬性,以指定要包含在install(EXPORT)
和export()
命令匯出的目標中的目標屬性的自訂清單。PDB_OUTPUT_DIRECTORY
屬性學會支援產生器表達式
。新增了
TESTS
目錄屬性,以保存由add_test()
命令定義的測試清單。建立了
VS_DEBUGGER_COMMAND
目標屬性,以使用 VS 2010 及更高版本的 Visual Studio 產生器 設定偵錯命令列。HLSL 原始檔屬性
VS_SHADER_DISABLE_OPTIMIZATIONS
和VS_SHADER_ENABLE_DEBUG
獲得了產生器表達式的支援。已為 VS 2010 及更高版本的 Visual Studio 產生器 新增了 HLSL 原始檔屬性
VS_SHADER_OBJECT_FILE_NAME
。該屬性指定編譯後的著色器物件的檔案名稱。
模組¶
FindALSA
模組現在提供匯入的目標。FindCURL
模組現在提供匯入的目標。FindJPEG
模組現在提供匯入的目標。FindLibXml2
模組現在提供匯入的目標。FindMatlab
模組現在支援 Matlab Runtime Compiler (MCR),用於編譯和連結 matlab 擴充功能。新增了
FindODBC
模組,以尋找開放式資料庫連線 (ODBC) 程式庫。FindPkgConfig
模組已學會匯出具有完整路徑的已找到程式庫,以便與target_link_libraries()
命令直接使用。新增了新的
FindPython3
和FindPython2
模組,以及新的FindPython
模組,以提供一種尋找 python 環境的新方法。UseSWIG
模組進行了全面更新,現在與用於產生程式庫的標準 CMake 命令更加一致,並且可以透過屬性完全設定。UseSWIG
模組學會透過UseSWIG_MODULE_VERSION
變數管理多種行為,以確保舊版支援以及更穩健地處理SWIG
進階功能(如%template
)。UseSWIG
模組學會支援 CSHARP 變體包裝器檔案。WriteCompilerDetectionHeader
模組新增了BARE_FEATURES
選項,以為新語言功能的確切關鍵字新增相容性定義。
產生器表達式¶
CTest¶
已重新設計
ctest_start()
命令,以便您可以簡單地呼叫ctest_start(APPEND)
,它將從 TAG 檔案讀取所有需要的資訊。參數解析也已放寬,因此參數的順序不太重要。新增了
PROCESSOR_AFFINITY
測試屬性,以請求 CTest 使用 CPU 親和性為一組處理器執行測試,該組處理器與設定了該屬性的其他並行執行的測試不相交。
CPack¶
CPack
模組現在使用變數CMAKE_PROJECT_VERSION_MAJOR
、CMAKE_PROJECT_VERSION_MINOR
和CMAKE_PROJECT_VERSION_PATCH
來初始化對應的 CPack 變數。新增了
CPack NuGet 產生器
,它對 NuGet 具有基本支援。
其他¶
已棄用和移除的功能¶
已移除
Visual Studio 8 2005
產生器。CMake 不再為函式庫目標產生
<tgt>_LIB_DEPENDS
快取條目。請參閱政策CMP0073
。
其他變更¶
標記為
SYSTEM
的目錄的包含旗標現在會移到非系統目錄之後。-isystem
旗標會自動執行此操作,因此,明確地將它們移到最後,使得在沒有任何-isystem
旗標的編譯器上行為一致。Fortran 相依性掃描現在支援 Fortran 子模組所暗示的相依性。
檔案
${CMAKE_BINARY_DIR}/cmake_install.cmake
的存在和功能現在已記錄在install()
文件中,以便外部封裝軟體可以利用 CPack 風格的組件安裝。CheckIncludeFile
模組check_include_file
巨集學會了尊重CMAKE_REQUIRED_LIBRARIES
變數。請參閱政策CMP0075
。CheckIncludeFileCXX
模組check_include_file_cxx
巨集學會了尊重CMAKE_REQUIRED_LIBRARIES
變數。請參閱政策CMP0075
。CheckIncludeFiles
模組check_include_files
巨集學會了尊重CMAKE_REQUIRED_LIBRARIES
變數。請參閱政策CMP0075
。cmake(1)
-E copy_directory
工具現在當來源目錄不存在時會失敗。先前它會通過建立一個空的目標目錄而成功。UseSWIG
模組swig_add_library()
命令(以及舊版的swig_add_module
命令)現在將 Java 模組的前綴設定為""
,適用於 MINGW、MSYS 和 CYGWIN 環境。