1 CMake 3.12 Release Notes
2 ************************
8 Changes made since CMake 3.11 include the following.
16 * The :ref:`Visual Studio Generators` for VS 2017 learned to support a
17 ``version=14.##`` option in the :variable:`CMAKE_GENERATOR_TOOLSET`
18 value (e.g. via the :manual:`cmake(1)` ``-T`` option) to specify a
19 toolset version number.
24 * The :manual:`cmake(1)` :ref:`Build Tool Mode` (``cmake --build``) gained
25 ``--parallel [<jobs>]`` and ``-j [<jobs>]`` options to specify a parallel
26 build level. They map to corresponding options of the native build tool.
31 * The :command:`add_compile_definitions` command was added to set preprocessor
32 definitions at directory level. This supersedes :command:`add_definitions`.
34 * The :command:`cmake_minimum_required` and :command:`cmake_policy(VERSION)`
35 commands now accept a version range using the form ``<min>[...<max>]``.
36 The ``<min>`` version is required but policies are set based on the
37 older of the running CMake version and the version specified by
38 ``<max>``. This allows projects to specify a range of versions
39 for which they have been updated and avoid explicit policy settings.
41 * The :command:`file(GLOB)` and :command:`file(GLOB_RECURSE)` commands
42 learned a new flag ``CONFIGURE_DEPENDS`` which enables expression of
43 build system dependency on globbed directory's contents.
45 * The :command:`file(TOUCH)` and :command:`file(TOUCH_NOCREATE)` commands
46 were added to expose ``TOUCH`` functionality without having to use
47 CMake's command-line tool mode with :command:`execute_process`.
49 * The :command:`find_package` command now searches prefixes specified by
50 the :variable:`<PackageName>_ROOT` CMake variable and the
51 :envvar:`<PackageName>_ROOT` environment variable. Package roots are
52 maintained as a stack so nested calls to all ``find_*`` commands inside
53 find modules also search the roots as prefixes.
54 See policy :policy:`CMP0074`.
56 * The :command:`install` command learned an optional ``NAMELINK_COMPONENT``
57 parameter, which allows you to change the component for a shared library's
58 namelink. If none is specified, the value of ``COMPONENT`` is used by
61 * The :command:`list` command learned a ``JOIN`` sub-command
62 to concatenate list's elements separated by a glue string.
64 * The :command:`list` command learned a ``SUBLIST`` sub-command
65 to get a sublist of the list.
67 * The :command:`list` command learned a ``TRANSFORM`` sub-command
68 to apply various string transformation to list's elements.
70 * The :command:`project` command learned an optional ``HOMEPAGE_URL``
71 parameter which has the effect of setting variables like
72 :variable:`PROJECT_HOMEPAGE_URL`, :variable:`<PROJECT-NAME>_HOMEPAGE_URL`
73 and :variable:`CMAKE_PROJECT_HOMEPAGE_URL`.
75 * The :command:`string` command learned a ``JOIN`` sub-command
76 to concatenate input strings separated by a glue string.
78 * :command:`target_compile_options` and :command:`add_compile_options`
79 commands gained a ``SHELL:`` prefix to specify a group of related
80 options using shell-like quoting.
82 * The :command:`target_link_libraries` command now supports
83 :ref:`Object Libraries`. Linking to an object library uses its object
84 files in direct dependents and also propagates usage requirements.
89 * The :variable:`CMAKE_FOLDER` variable was added to initialize the
90 :prop_tgt:`FOLDER` property on all targets.
92 * The :variable:`CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION` variable
93 was defined to initialize all
94 :prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION` target properties.
96 * ``CMAKE_PROJECT_VERSION*`` variables have been introduced:
98 - :variable:`CMAKE_PROJECT_VERSION`
99 - :variable:`CMAKE_PROJECT_VERSION_MAJOR`
100 - :variable:`CMAKE_PROJECT_VERSION_MINOR`
101 - :variable:`CMAKE_PROJECT_VERSION_PATCH`
102 - :variable:`CMAKE_PROJECT_VERSION_TWEAK`
104 * The :variable:`CMAKE_SUPPRESS_REGENERATION` variable was extended to
105 support the :generator:`Ninja` and :ref:`Makefile Generators`.
106 It is also now documented.
108 * ``CMAKE_VS_SDK_*_DIRECTORIES`` variables were defined to tell
109 :ref:`Visual Studio Generators` for VS 2010 and above how to populate
110 fields in ``.vcxproj`` files that specify SDK directories. The
113 - :variable:`CMAKE_VS_SDK_EXCLUDE_DIRECTORIES`
114 - :variable:`CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES`
115 - :variable:`CMAKE_VS_SDK_INCLUDE_DIRECTORIES`
116 - :variable:`CMAKE_VS_SDK_LIBRARY_DIRECTORIES`
117 - :variable:`CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES`
118 - :variable:`CMAKE_VS_SDK_REFERENCE_DIRECTORIES`
119 - :variable:`CMAKE_VS_SDK_SOURCE_DIRECTORIES`
121 * A :variable:`MSVC_TOOLSET_VERSION` variable was added to provide the
122 MSVC toolset version associated with the current MSVC compiler version
123 in :variable:`MSVC_VERSION`.
128 * The :prop_tgt:`COMMON_LANGUAGE_RUNTIME` target property was introduced
129 to configure the use of managed C++ for :ref:`Visual Studio Generators`
130 for VS 2010 and above.
131 A corresponding :prop_tgt:`IMPORTED_COMMON_LANGUAGE_RUNTIME` target
132 property was added to support ``C++/CLI`` for imported targets.
134 * The :prop_tgt:`DOTNET_TARGET_FRAMEWORK_VERSION` target property
135 was introduced as replacement for
136 :prop_tgt:`VS_DOTNET_TARGET_FRAMEWORK_VERSION`, which is considered
139 * An :prop_tgt:`EXPORT_PROPERTIES` target property was added to specify a
140 custom list of target properties to include in targets exported by the
141 :command:`install(EXPORT)` and :command:`export` commands.
143 * The :prop_tgt:`PDB_OUTPUT_DIRECTORY` property learned to support
144 :manual:`generator expressions <cmake-generator-expressions(7)>`.
146 * A :prop_dir:`TESTS` directory property was added to hold the list of
147 tests defined by the :command:`add_test` command.
149 * A :prop_tgt:`VS_DEBUGGER_COMMAND` target property was created to set the
150 debugging command line with :ref:`Visual Studio Generators` for VS 2010
153 * HLSL source file properties :prop_sf:`VS_SHADER_DISABLE_OPTIMIZATIONS`
154 and :prop_sf:`VS_SHADER_ENABLE_DEBUG` gained support for generator
157 * HLSL source file property :prop_sf:`VS_SHADER_OBJECT_FILE_NAME` has been
158 added to the :ref:`Visual Studio Generators` for VS 2010 and above.
159 The property specifies the file name of the compiled shader object.
164 * The :module:`FindALSA` module now provides imported targets.
166 * The :module:`FindCURL` module now provides imported targets.
168 * The :module:`FindJPEG` module now provides imported targets.
170 * The :module:`FindLibXml2` module now provides imported targets.
172 * The :module:`FindMatlab` module now supports the Matlab Runtime
173 Compiler (MCR) for compiling and linking matlab extensions.
175 * A :module:`FindODBC` module was added to find an Open Database Connectivity
178 * The :module:`FindPkgConfig` module has learned to export the found
179 libraries with full path for direct consumption with the
180 :command:`target_link_libraries` command.
182 * New :module:`FindPython3` and :module:`FindPython2` modules, as well as
183 a new :module:`FindPython` module, have been added to provide a new way
184 to locate python environments.
186 * The :module:`UseSWIG` module gained a whole refresh and is now more
187 consistent with standard CMake commands to generate libraries and is
188 fully configurable through properties.
190 * The :module:`UseSWIG` module learned to manage multiple behaviors through
191 ``UseSWIG_MODULE_VERSION`` variable to ensure legacy support as well as more
192 robust handling of ``SWIG`` advanced features (like ``%template``).
194 * The :module:`UseSWIG` module learned to support CSHARP variant
197 * The :module:`WriteCompilerDetectionHeader` module gained a ``BARE_FEATURES``
198 option to add a compatibility define for the exact keyword of a new language
201 Generator Expressions
202 ---------------------
204 * A new ``$<GENEX_EVAL:...>`` and ``$<TARGET_GENEX_EVAL:target,...>``
205 :manual:`generator expression <cmake-generator-expressions(7)>`
206 has been added to enable consumption of generator expressions whose
207 evaluation results itself in generator expressions.
209 * A new ``$<IN_LIST:...>``
210 :manual:`generator expression <cmake-generator-expressions(7)>`
213 * A new ``$<TARGET_EXISTS:...>``
214 :manual:`generator expression <cmake-generator-expressions(7)>`
217 * A new ``$<TARGET_NAME_IF_EXISTS:...>``
218 :manual:`generator expression <cmake-generator-expressions(7)>`
224 * The :command:`ctest_start` command has been reworked so that you can simply
225 call ``ctest_start(APPEND)`` and it will read all the needed information from
226 the TAG file. The argument parsing has also been relaxed so that the order of
227 the arguments is less significant.
229 * A :prop_test:`PROCESSOR_AFFINITY` test property was added to request
230 that CTest run a test with CPU affinity for a set of processors
231 disjoint from other concurrently running tests with the property set.
236 * The :module:`CPack` module now uses variables
237 :variable:`CMAKE_PROJECT_VERSION_MAJOR`,
238 :variable:`CMAKE_PROJECT_VERSION_MINOR` and
239 :variable:`CMAKE_PROJECT_VERSION_PATCH`
240 to initialize corresponding CPack variables.
242 * A :cpack_gen:`CPack NuGet Generator` was was added with basic
243 support for `NuGet`_.
245 .. _NuGet: https://docs.microsoft.com/en-us/nuget/what-is-nuget
250 * The :manual:`Compile Features <cmake-compile-features(7)>` functionality
251 is now aware of C++ 20. No specific features are yet enumerated besides
252 the ``cxx_std_20`` meta-feature.
254 * The :manual:`Compile Features <cmake-compile-features(7)>` functionality
255 is now aware of the availability of C features in MSVC since VS 2010.
257 * The :manual:`Compile Features <cmake-compile-features(7)>` functionality
258 is now aware of C language standards supported by Texas Instruments C
261 Deprecated and Removed Features
262 ===============================
264 * The :generator:`Visual Studio 8 2005` generator has been removed.
266 * CMake no longer produces ``<tgt>_LIB_DEPENDS`` cache entries
267 for library targets. See policy :policy:`CMP0073`.
272 * Include flags for directories marked as ``SYSTEM`` are now moved after
273 non-system directories. The ``-isystem`` flag does this automatically,
274 so moving them explicitly to the end makes the behavior consistent on
275 compilers that do not have any ``-isystem`` flag.
277 * Fortran dependency scanning now supports dependencies implied by
278 `Fortran Submodules`_.
280 * The existence and functionality of the file
281 ``${CMAKE_BINARY_DIR}/cmake_install.cmake`` has now been documented in the
282 :command:`install` documentation so that external packaging software can take
283 advantage of CPack-style component installs.
285 * The :module:`CheckIncludeFile` module ``check_include_file`` macro
286 learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
287 See policy :policy:`CMP0075`.
289 * The :module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro
290 learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
291 See policy :policy:`CMP0075`.
293 * The :module:`CheckIncludeFiles` module ``check_include_files`` macro
294 learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
295 See policy :policy:`CMP0075`.
297 * The :manual:`cmake(1)` ``-E copy_directory`` tool now fails when the
298 source directory does not exist. Previously it succeeded by creating
299 an empty destination directory.
301 * The :module:`UseSWIG` module :command:`swig_add_library` command
302 (and legacy ``swig_add_module`` command) now set the prefix of
303 Java modules to ``""`` for MINGW, MSYS, and CYGWIN environments.
305 .. _`Fortran Submodules`: http://fortranwiki.org/fortran/show/Submodules