CMake 3.12 Release Notes¶
Changes made since CMake 3.11 include the following.
New Features¶
Generators¶
The Visual Studio Generators for VS 2017 learned to support a
version=14.##
option in theCMAKE_GENERATOR_TOOLSET
value (e.g. via thecmake(1)
-T
option) to specify a toolset version number.
Command-Line¶
The
cmake(1)
Build a Project (cmake --build
) gained--parallel [<jobs>]
and-j [<jobs>]
options to specify a parallel build level. They map to corresponding options of the native build tool.
Commands¶
The
add_compile_definitions()
command was added to set preprocessor definitions at directory level. This supersedesadd_definitions()
.The
cmake_minimum_required()
andcmake_policy(VERSION)
commands now accept a version range using the form<min>[...<max>]
. The<min>
version is required but policies are set based on the older of the running CMake version and the version specified by<max>
. This allows projects to specify a range of versions for which they have been updated and avoid explicit policy settings.The
file(GLOB)
andfile(GLOB_RECURSE)
commands learned a new flagCONFIGURE_DEPENDS
which enables expression of build system dependency on globbed directory's contents.The
file(TOUCH)
andfile(TOUCH_NOCREATE)
commands were added to exposeTOUCH
functionality without having to use CMake's command-line tool mode withexecute_process()
.The
find_package()
command now searches prefixes specified by the<PackageName>_ROOT
CMake variable and the<PackageName>_ROOT
environment variable. Package roots are maintained as a stack so nested calls to allfind_*
commands inside find modules also search the roots as prefixes. See policyCMP0074
.The
install()
command learned an optionalNAMELINK_COMPONENT
parameter, which allows you to change the component for a shared library's namelink. If none is specified, the value ofCOMPONENT
is used by default.The
list()
command learned aJOIN
sub-command to concatenate list's elements separated by a glue string.The
list()
command learned aSUBLIST
sub-command to get a sublist of the list.The
list()
command learned aTRANSFORM
sub-command to apply various string transformation to list's elements.The
project()
command learned an optionalHOMEPAGE_URL
parameter which has the effect of setting variables likePROJECT_HOMEPAGE_URL
,<PROJECT-NAME>_HOMEPAGE_URL
andCMAKE_PROJECT_HOMEPAGE_URL
.The
string()
command learned aJOIN
sub-command to concatenate input strings separated by a glue string.target_compile_options()
andadd_compile_options()
commands gained aSHELL:
prefix to specify a group of related options using shell-like quoting.The
target_link_libraries()
command now supports Object Libraries. Linking to an object library uses its object files in direct dependents and also propagates usage requirements.
Variables¶
The
CMAKE_FOLDER
variable was added to initialize theFOLDER
property on all targets.The
CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION
variable was defined to initialize allDOTNET_TARGET_FRAMEWORK_VERSION
target properties.CMAKE_PROJECT_VERSION*
variables have been introduced:The
CMAKE_SUPPRESS_REGENERATION
variable was extended to support theNinja
and Makefile Generators. It is also now documented.CMAKE_VS_SDK_*_DIRECTORIES
variables were defined to tell Visual Studio Generators for VS 2010 and above how to populate fields in.vcxproj
files that specify SDK directories. The variables are:A
MSVC_TOOLSET_VERSION
variable was added to provide the MSVC toolset version associated with the current MSVC compiler version inMSVC_VERSION
.
Properties¶
The
COMMON_LANGUAGE_RUNTIME
target property was introduced to configure the use of managed C++ for Visual Studio Generators for VS 2010 and above. A correspondingIMPORTED_COMMON_LANGUAGE_RUNTIME
target property was added to supportC++/CLI
for imported targets.The
DOTNET_TARGET_FRAMEWORK_VERSION
target property was introduced as replacement forVS_DOTNET_TARGET_FRAMEWORK_VERSION
, which is considered deprecated now.An
EXPORT_PROPERTIES
target property was added to specify a custom list of target properties to include in targets exported by theinstall(EXPORT)
andexport()
commands.The
PDB_OUTPUT_DIRECTORY
property learned to supportgenerator expressions
.A
TESTS
directory property was added to hold the list of tests defined by theadd_test()
command.A
VS_DEBUGGER_COMMAND
target property was created to set the debugging command line with Visual Studio Generators for VS 2010 and above.HLSL source file properties
VS_SHADER_DISABLE_OPTIMIZATIONS
andVS_SHADER_ENABLE_DEBUG
gained support for generator expressions.HLSL source file property
VS_SHADER_OBJECT_FILE_NAME
has been added to the Visual Studio Generators for VS 2010 and above. The property specifies the file name of the compiled shader object.
Modules¶
The
FindALSA
module now provides imported targets.The
FindCURL
module now provides imported targets.The
FindJPEG
module now provides imported targets.The
FindLibXml2
module now provides imported targets.The
FindMatlab
module now supports the Matlab Runtime Compiler (MCR) for compiling and linking matlab extensions.A
FindODBC
module was added to find an Open Database Connectivity (ODBC) library.The
FindPkgConfig
module has learned to export the found libraries with full path for direct consumption with thetarget_link_libraries()
command.New
FindPython3
andFindPython2
modules, as well as a newFindPython
module, have been added to provide a new way to locate python environments.The
UseSWIG
module gained a whole refresh and is now more consistent with standard CMake commands to generate libraries and is fully configurable through properties.The
UseSWIG
module learned to manage multiple behaviors throughUseSWIG_MODULE_VERSION
variable to ensure legacy support as well as more robust handling ofSWIG
advanced features (like%template
).The
UseSWIG
module learned to support CSHARP variant wrapper files.The
WriteCompilerDetectionHeader
module gained aBARE_FEATURES
option to add a compatibility define for the exact keyword of a new language feature.
Generator Expressions¶
A new
$<GENEX_EVAL:...>
and$<TARGET_GENEX_EVAL:target,...>
generator expression
has been added to enable consumption of generator expressions whose evaluation results itself in generator expressions.A new
$<IN_LIST:...>
generator expression
has been added.A new
$<TARGET_EXISTS:...>
generator expression
has been added.A new
$<TARGET_NAME_IF_EXISTS:...>
generator expression
has been added.
CTest¶
The
ctest_start()
command has been reworked so that you can simply callctest_start(APPEND)
and it will read all the needed information from the TAG file. The argument parsing has also been relaxed so that the order of the arguments is less significant.A
PROCESSOR_AFFINITY
test property was added to request that CTest run a test with CPU affinity for a set of processors disjoint from other concurrently running tests with the property set.
CPack¶
The
CPack
module now uses variablesCMAKE_PROJECT_VERSION_MAJOR
,CMAKE_PROJECT_VERSION_MINOR
andCMAKE_PROJECT_VERSION_PATCH
to initialize corresponding CPack variables.A
CPack NuGet Generator
was was added with basic support for NuGet.
Other¶
The
Compile Features
functionality is now aware of C++ 20. No specific features are yet enumerated besides thecxx_std_20
meta-feature.The
Compile Features
functionality is now aware of the availability of C features in MSVC since VS 2010.The
Compile Features
functionality is now aware of C language standards supported by Texas Instruments C compilers.
Deprecated and Removed Features¶
The
Visual Studio 8 2005
generator has been removed.CMake no longer produces
<tgt>_LIB_DEPENDS
cache entries for library targets. See policyCMP0073
.
Other Changes¶
Include flags for directories marked as
SYSTEM
are now moved after non-system directories. The-isystem
flag does this automatically, so moving them explicitly to the end makes the behavior consistent on compilers that do not have any-isystem
flag.Fortran dependency scanning now supports dependencies implied by Fortran Submodules.
The existence and functionality of the file
${CMAKE_BINARY_DIR}/cmake_install.cmake
has now been documented in theinstall()
documentation so that external packaging software can take advantage of CPack-style component installs.The
CheckIncludeFile
modulecheck_include_file
macro learned to honor theCMAKE_REQUIRED_LIBRARIES
variable. See policyCMP0075
.The
CheckIncludeFileCXX
modulecheck_include_file_cxx
macro learned to honor theCMAKE_REQUIRED_LIBRARIES
variable. See policyCMP0075
.The
CheckIncludeFiles
modulecheck_include_files
macro learned to honor theCMAKE_REQUIRED_LIBRARIES
variable. See policyCMP0075
.The
cmake(1)
-E copy_directory
tool now fails when the source directory does not exist. Previously it succeeded by creating an empty destination directory.The
UseSWIG
moduleswig_add_library()
command (and legacyswig_add_module
command) now set the prefix of Java modules to""
for MINGW, MSYS, and CYGWIN environments.