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
,可啟用在 globbed 目錄的內容上建置系統相依性的表示。新增了
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 Generators。現在也已將其文件化。定義了
CMAKE_VS_SDK_*_DIRECTORIES
變數,以告知用於 VS 2010 及更高版本的 Visual Studio Generators 如何在指定 SDK 目錄的.vcxproj
檔案中填入欄位。這些變數包括:新增了
MSVC_TOOLSET_VERSION
變數,以提供與MSVC_VERSION
中目前 MSVC 編譯器版本相關聯的 MSVC 工具集版本。
屬性¶
引入了
COMMON_LANGUAGE_RUNTIME
目標屬性,以設定用於 VS 2010 及更高版本的 Visual Studio Generators 的 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 Generators 設定偵錯命令列。HLSL 來源檔案屬性
VS_SHADER_DISABLE_OPTIMIZATIONS
和VS_SHADER_ENABLE_DEBUG
獲得了產生器運算式的支援。為 VS 2010 及更高版本的 Visual Studio Generators 新增了 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
。