Help/release/3.12.rst
CMake 3.12 Release Notes
.. only:: html
.. contents::
Changes made since CMake 3.11 include the following.
Visual Studio Generators for VS 2017 learned to support a
version=14.## option in the :variable:CMAKE_GENERATOR_TOOLSET
value (e.g. via the :manual:cmake(1) -T option) to specify a
toolset version number.cmake(1) :ref:Build Tool Mode (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.The :command:add_compile_definitions command was added to set preprocessor
definitions at directory level. This supersedes :command:add_definitions.
The :command:cmake_minimum_required and :command:cmake_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 :command:file(GLOB) and :command:file(GLOB_RECURSE) commands
learned a new flag CONFIGURE_DEPENDS which enables expression of
build system dependency on globbed directory's contents.
The :command:file(TOUCH) and :command:file(TOUCH_NOCREATE) commands
were added to expose TOUCH functionality without having to use
CMake's command-line tool mode with :command:execute_process.
The :command:find_package command now searches prefixes specified by
the :variable:<PackageName>_ROOT CMake variable and the
:envvar:<PackageName>_ROOT environment variable. Package roots are
maintained as a stack so nested calls to all find_* commands inside
find modules also search the roots as prefixes.
See policy :policy:CMP0074.
The :command:install command learned an optional NAMELINK_COMPONENT
parameter, which allows you to change the component for a shared library's
namelink. If none is specified, the value of COMPONENT is used by
default.
The :command:list command learned a JOIN sub-command
to concatenate list's elements separated by a glue string.
The :command:list command learned a SUBLIST sub-command
to get a sublist of the list.
The :command:list command learned a TRANSFORM sub-command
to apply various string transformation to list's elements.
The :command:project command learned an optional HOMEPAGE_URL
parameter which has the effect of setting variables like
:variable:PROJECT_HOMEPAGE_URL, :variable:<PROJECT-NAME>_HOMEPAGE_URL
and :variable:CMAKE_PROJECT_HOMEPAGE_URL.
The :command:string command learned a JOIN sub-command
to concatenate input strings separated by a glue string.
:command:target_compile_options and :command:add_compile_options
commands gained a SHELL: prefix to specify a group of related
options using shell-like quoting.
The :command:target_link_libraries command now supports
:ref:Object Libraries. Linking to an object library uses its object
files in direct dependents and also propagates usage requirements.
The :variable:CMAKE_FOLDER variable was added to initialize the
:prop_tgt:FOLDER property on all targets.
The :variable:CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION variable
was defined to initialize all
:prop_tgt:DOTNET_TARGET_FRAMEWORK_VERSION target properties.
CMAKE_PROJECT_VERSION* variables have been introduced:
CMAKE_PROJECT_VERSIONCMAKE_PROJECT_VERSION_MAJORCMAKE_PROJECT_VERSION_MINORCMAKE_PROJECT_VERSION_PATCHCMAKE_PROJECT_VERSION_TWEAKThe :variable:CMAKE_SUPPRESS_REGENERATION variable was extended to
support the :generator:Ninja and :ref:Makefile Generators.
It is also now documented.
CMAKE_VS_SDK_*_DIRECTORIES variables were defined to tell
:ref:Visual Studio Generators for VS 2010 and above how to populate
fields in .vcxproj files that specify SDK directories. The
variables are:
CMAKE_VS_SDK_EXCLUDE_DIRECTORIESCMAKE_VS_SDK_EXECUTABLE_DIRECTORIESCMAKE_VS_SDK_INCLUDE_DIRECTORIESCMAKE_VS_SDK_LIBRARY_DIRECTORIESCMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIESCMAKE_VS_SDK_REFERENCE_DIRECTORIESCMAKE_VS_SDK_SOURCE_DIRECTORIESA :variable:MSVC_TOOLSET_VERSION variable was added to provide the
MSVC toolset version associated with the current MSVC compiler version
in :variable:MSVC_VERSION.
The :prop_tgt:COMMON_LANGUAGE_RUNTIME target property was introduced
to configure the use of managed C++ for :ref:Visual Studio Generators
for VS 2010 and above.
A corresponding :prop_tgt:IMPORTED_COMMON_LANGUAGE_RUNTIME target
property was added to support C++/CLI for imported targets.
The :prop_tgt:DOTNET_TARGET_FRAMEWORK_VERSION target property
was introduced as replacement for
:prop_tgt:VS_DOTNET_TARGET_FRAMEWORK_VERSION, which is considered
deprecated now.
An :prop_tgt:EXPORT_PROPERTIES target property was added to specify a
custom list of target properties to include in targets exported by the
:command:install(EXPORT) and :command:export commands.
The :prop_tgt:PDB_OUTPUT_DIRECTORY property learned to support
:manual:generator expressions <cmake-generator-expressions(7)>.
A :prop_dir:TESTS directory property was added to hold the list of
tests defined by the :command:add_test command.
A :prop_tgt:VS_DEBUGGER_COMMAND target property was created to set the
debugging command line with :ref:Visual Studio Generators for VS 2010
and above.
HLSL source file properties :prop_sf:VS_SHADER_DISABLE_OPTIMIZATIONS
and :prop_sf:VS_SHADER_ENABLE_DEBUG gained support for generator
expressions.
HLSL source file property :prop_sf:VS_SHADER_OBJECT_FILE_NAME has been
added to the :ref:Visual Studio Generators for VS 2010 and above.
The property specifies the file name of the compiled shader object.
The :module:FindALSA module now provides imported targets.
The :module:FindCURL module now provides imported targets.
The :module:FindJPEG module now provides imported targets.
The :module:FindLibXml2 module now provides imported targets.
The :module:FindMatlab module now supports the Matlab Runtime
Compiler (MCR) for compiling and linking matlab extensions.
A :module:FindODBC module was added to find an Open Database Connectivity
(ODBC) library.
The :module:FindPkgConfig module has learned to export the found
libraries with full path for direct consumption with the
:command:target_link_libraries command.
New :module:FindPython3 and :module:FindPython2 modules, as well as
a new :module:FindPython module, have been added to provide a new way
to locate python environments.
The :module: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 :module:UseSWIG module learned to manage multiple behaviors through
UseSWIG_MODULE_VERSION variable to ensure legacy support as well as more
robust handling of SWIG advanced features (like %template).
The :module:UseSWIG module learned to support CSHARP variant
wrapper files.
The :module:WriteCompilerDetectionHeader module gained a BARE_FEATURES
option to add a compatibility define for the exact keyword of a new language
feature.
A new $<GENEX_EVAL:...> and $<TARGET_GENEX_EVAL:target,...>
:manual:generator expression <cmake-generator-expressions(7)>
has been added to enable consumption of generator expressions whose
evaluation results itself in generator expressions.
A new $<IN_LIST:...>
:manual:generator expression <cmake-generator-expressions(7)>
has been added.
A new $<TARGET_EXISTS:...>
:manual:generator expression <cmake-generator-expressions(7)>
has been added.
A new $<TARGET_NAME_IF_EXISTS:...>
:manual:generator expression <cmake-generator-expressions(7)>
has been added.
The :command:ctest_start command has been reworked so that you can simply
call ctest_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 :prop_test: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.
The :module:CPack module now uses variables
:variable:CMAKE_PROJECT_VERSION_MAJOR,
:variable:CMAKE_PROJECT_VERSION_MINOR and
:variable:CMAKE_PROJECT_VERSION_PATCH
to initialize corresponding CPack variables.
A :cpack_gen:CPack NuGet Generator was was added with basic
support for NuGet_.
.. _NuGet: https://learn.microsoft.com/en-us/nuget/what-is-nuget
The :manual:Compile Features <cmake-compile-features(7)> functionality
is now aware of C++ 20. No specific features are yet enumerated besides
the cxx_std_20 meta-feature.
The :manual:Compile Features <cmake-compile-features(7)> functionality
is now aware of the availability of C features in MSVC since VS 2010.
The :manual:Compile Features <cmake-compile-features(7)> functionality
is now aware of C language standards supported by Texas Instruments C
compilers.
The :generator:Visual Studio 8 2005 generator has been removed.
CMake no longer produces <tgt>_LIB_DEPENDS cache entries
for library targets. See policy :policy:CMP0073.
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 the
:command:install documentation so that external packaging software can take
advantage of CPack-style component installs.
The :module:CheckIncludeFile module check_include_file() command
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy :policy:CMP0075.
The :module:CheckIncludeFileCXX module check_include_file_cxx() command
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy :policy:CMP0075.
The :module:CheckIncludeFiles module check_include_files() command
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy :policy:CMP0075.
The :manual: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 :module:UseSWIG module :command:swig_add_library command
(and legacy swig_add_module command) now set the prefix of
Java modules to "" for MINGW, MSYS, and CYGWIN environments.
.. _Fortran Submodules: https://fortranwiki.org/fortran/show/Submodules