code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.10 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.9 Release Notes" href="3.9.html" />
    <link rel="prev" title="CMake 3.11 Release Notes" href="3.11.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.10 Release Notes

CMake 3.10 Release Notes¶

Contents

CMake 3.10 Release Notes

New Features

Platforms

Generators

Commands

Variables

Properties

Modules

Autogen

CTest

CPack

Other

Deprecated and Removed Features

Other Changes

Updates

3.10.1

3.10.3

Changes made since CMake 3.9 include the following.

New Features¶

Platforms¶

The flang Fortran compiler is now supported, with compiler id Flang.

A new minimal platform file for Midipix was added.

Support for the MSVC ARM64 architecture was added.
Visual Studio 2017 Update 4 and above offer an ARM64 toolchain.

Support for the IAR ARM Compiler was improved.

Generators¶

The Makefile Generators and the Ninja generator learned
to add compiler launcher tools like ccache along with the compiler for the
CUDA language (C and CXX were supported previously).  See the
CMAKE_<LANG>_COMPILER_LAUNCHER variable and
<LANG>_COMPILER_LAUNCHER target property for details.

The CodeBlocks extra generator learned to optionally exclude
files from outside the project root directory from the generated project.
See the CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES variable.

Commands¶

The cmake_host_system_information() command learned more keys
to get information about the processor capabilities and the host OS
version.

The configure_file() command learned to support indented
#  cmakedefine and #  cmakedefine01. Spaces and/or tabs between
the # character and the cmakedefine/cmakedefine01 words
are now understood and preserved in the output.

The execute_process() command gained a RESULTS_VARIABLE
option to collect a list of results from all children in a pipeline
of processes when multiple COMMAND arguments are given.

The include_guard() command was introduced to allow guarding
CMake scripts from being included more than once. The command supports
DIRECTORY and GLOBAL options to adjust the corresponding include guard
scope. If no options given, include guard is similar to basic variable-based
check.

The string() command learned a new PREPEND subcommand.

The string(TIMESTAMP) command now supports %A
for full weekday name and %B for full month name.

Variables¶

A CMAKE_DIRECTORY_LABELS variable was added to specify
labels for all tests in a directory.

Properties¶

A <LANG>_CPPCHECK target property and supporting
CMAKE_<LANG>_CPPCHECK variable were introduced to tell
the Makefile Generators and the Ninja generator to
run cppcheck with the compiler for C and CXX languages.

A LABELS directory property was added to specify labels
for all targets and tests in a directory.

A TEST_INCLUDE_FILES directory property was added to
list any number of files to be included when running tests with
ctest(1).  This generalizes the TEST_INCLUDE_FILE
property.

The VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>
target property was added to support custom XML tags for reference
assemblies in C# targets.

Source file properties VS_SHADER_OUTPUT_HEADER_FILE and
VS_SHADER_VARIABLE_NAME have been added to specify more
details of .hlsl sources with Visual Studio Generators.

Modules¶

The FindCurses module gained a CURSES_NEED_WIDE option
to request the wide-character variant.

The FindEXPAT module now provides imported targets.

The FindFreetype module now provides imported targets.

FindMPI gained a number of new features, including:

Language-specific components have been added to the module.

Many more MPI environments are now supported.

The environmental support for Fortran has been improved.

A user now has fine-grained control over the MPI selection process,
including passing custom parameters to the MPI compiler.

The version of the implemented MPI standard is now being exposed.

MPI-2 C++ bindings can now be detected and also suppressed if so desired.

The available Fortran bindings are now being detected and verified.

Various MPI-3 information can be requested, including the library version
and Fortran capabilities of the individual bindings.

Statically linked MPI implementations are supported.

A FindOpenACC module was added to detect compiler support
for OpenACC.  Currently only supports PGI, GNU and Cray compilers.

The FindOpenGL module gained support for GLVND on Linux.

The FindOpenMP module gained support for
language-specific components.

A FindPatch module was added to find the patch
command-line executable.

The FindProtobuf module protobuf_generate_cpp() command
gained a DESCRIPTORS option to generate descriptor files.

The GoogleTest module gained a new command
gtest_discover_tests() implementing dynamic (build-time) test
discovery.  Unlike the source parsing approach, dynamic discovery executes
the test (in 'list available tests' mode) at build time to discover tests.
This is robust against unusual ways of labeling tests, provides much better
support for advanced features such as parameterized tests, and does not
require re-running CMake to discover added or removed tests within a test
executable.  Note that a breaking change was made in CMake 3.10.3 to address
an ambiguity of the TIMEOUT keyword (see 3.10.3).

The InstallRequiredSystemLibraries module gained support
for installing Intel compiler runtimes.

Autogen¶

When using AUTOMOC or AUTOUIC with a
multi configuration generator (e.g. Xcode),
included *.moc,  moc_*.cpp and ui_*.h files are generated in
<AUTOGEN_BUILD_DIR>/include_<CONFIG> instead of
<AUTOGEN_BUILD_DIR>/include.

When using AUTOMOC or AUTOUIC,
source files that are GENERATED will be processed as well.
They were ignored by AUTOMOC and AUTOUIC
in earlier releases.
See policy CMP0071.

When using AUTOMOC, CMake searches for the strings Q_OBJECT,
Q_GADGET or Q_NAMESPACE in a source file to determine if it needs
to be moc processed.  The new CMAKE_AUTOMOC_MACRO_NAMES
variable and AUTOMOC_MACRO_NAMES target property may be set
to register additional strings (macro names) to search for.

When using AUTOMOC, the new
CMAKE_AUTOMOC_COMPILER_PREDEFINES variable and
AUTOMOC_COMPILER_PREDEFINES target property specify whether
to enable or disable the generation of the compiler pre definitions file
moc_predefs.h.

CTest¶

A CTEST_LABELS_FOR_SUBPROJECTS CTest module variable and CTest
script variable were added to specify a list of labels that should be
treated as subprojects by CDash. To use this value in both the CTest module
and the ctest command line Dashboard Client mode (e.g. ctest -S)
set it in the CTestConfig.cmake config file.

CPack¶

A CPack FreeBSD Generator was added for FreeBSD pkg(8).

The CPack DEB Generator was enabled on Windows.  While not
fully featured (due to the lack of external UNIX tools) this will allow
building basic cross-platform Debian packages.

The CPack DEB Generator learned to set package release
version in Version info property.
See the CPACK_DEBIAN_PACKAGE_RELEASE variable.

The CPack DEB Generator learned more strict package
version checking that complies with Debian rules.

The CPackIFW module cpack_ifw_configure_component() and
cpack_ifw_configure_component_group() commands gained a new
REPLACES and CHECKABLE options.

The CPack IFW Generator gained new
CPACK_IFW_PACKAGE_FILE_EXTENSION variable to customize
target binary format.

The CPack IFW Generator gained new
CPACK_IFW_REPOSITORIES_DIRECTORIES variable to specify
additional repositories dirs that will be used to resolve and
repack dependent components. This feature is only available when
using QtIFW 3.1 or later.

The CPack RPM Generator and CPack DEB Generator
learned to set the package epoch version.
See CPACK_RPM_PACKAGE_EPOCH and
CPACK_DEBIAN_PACKAGE_EPOCH variables.

Other¶

The cmake(1) -E mode gained support for sha1sum,
sha224sum, sha256sum, sha384sum, and sha512sum.

The graphviz output now distinguishes among the different dependency types
PUBLIC, PRIVATE and INTERFACE and represents them in the output
graph as solid, dashed and dotted edges.

Deprecated and Removed Features¶

Support for building CMake itself with C++98 compilers was dropped.
CMake is now implemented using C++11.

Support for building CMake on HP-UX has been dropped pending better
support for C++11 and a port of libuv.  See CMake Issue 17137.
Use CMake 3.9 or lower instead for HP-UX support.

Other Changes¶

On FreeBSD the C++ compiler named c++ is now the preferred default.

The file(GENERATE) command now interprets relative paths
given to its OUTPUT and INPUT arguments with respect to the
caller's current binary and source directories, respectively.
See policy CMP0070.

The get_filename_component() PROGRAM mode semantics
have been revised to not tolerate unquoted spaces in the path
to the program while also accepting arguments.  While technically
incompatible with the old behavior, it is expected that behavior
under typical use cases with properly-quoted command-lines has
not changed.

Updates¶

Changes made since CMake 3.10.0 include the following.

3.10.1¶

The cmake-server(7) codemodel response cross-references
field added by 3.10.0 has been dropped due to excessive memory usage.
Another approach will be needed to provide backtrace information.

3.10.3¶

CMake 3.10.1 added a TIMEOUT option to gtest_discover_tests()
from the GoogleTest module.  That keyword clashed with the
TIMEOUT test property, which is one of the common properties that
would be set with the command's PROPERTIES keyword, usually leading
to legal but unintended behavior.  The keyword was changed to
DISCOVERY_TIMEOUT in CMake 3.10.3 to address this problem.  The
ambiguous behavior of the gtest_discover_tests() command's
TIMEOUT keyword in 3.10.1 and 3.10.2 has not been preserved.

Table of Contents

CMake 3.10 Release Notes

New Features

Platforms

Generators

Commands

Variables

Properties

Modules

Autogen

CTest

CPack

Other

Deprecated and Removed Features

Other Changes

Updates

3.10.1

3.10.3

Previous topic

CMake 3.11 Release Notes

Next topic

CMake 3.9 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.10 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.


code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.11 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.10 Release Notes" href="3.10.html" />
    <link rel="prev" title="CMake 3.12 Release Notes" href="3.12.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.11 Release Notes

CMake 3.11 Release Notes¶

Contents

CMake 3.11 Release Notes

New Features

Platforms

Generators

Commands

Variables

Properties

Modules

Autogen

CTest

CPack

Other

Deprecated and Removed Features

Other Changes

Updates

3.11.1

3.11.2

3.11.3

Changes made since CMake 3.10 include the following.

New Features¶

Platforms¶

TI C/C++ compilers are now supported by the Ninja generator.

Generators¶

The CodeBlocks extra generator learned to check a
CMAKE_CODEBLOCKS_COMPILER_ID variable for a custom
compiler identification value to place in the project file.

The Makefile Generators and the Ninja generator learned
to add compiler launcher tools along with the compiler for the Fortran
language (C, CXX, and CUDA were supported previously).
See the CMAKE_<LANG>_COMPILER_LAUNCHER variable and
<LANG>_COMPILER_LAUNCHER target property for details.

Visual Studio Generators learned to support the COMPILE_LANGUAGE
generator expression in
target-wide COMPILE_DEFINITIONS,
INCLUDE_DIRECTORIES, COMPILE_OPTIONS, and
file(GENERATE).  See generator expression documentation
for caveats.

The Xcode generator learned to support the COMPILE_LANGUAGE
generator expression in
target-wide COMPILE_DEFINITIONS and
INCLUDE_DIRECTORIES.  It previously supported only
COMPILE_OPTIONS and file(GENERATE).
See generator expression documentation for caveats.

Commands¶

add_library() and add_executable() commands can now be
called without any sources and will not complain as long as sources are
added later via the target_sources() command.

The file(DOWNLOAD) and file(UPLOAD) commands
gained NETRC and NETRC_FILE options to specify use of a
.netrc file.

The target_compile_definitions() command learned to set the
INTERFACE_COMPILE_DEFINITIONS property on
Imported Targets.

The target_compile_features() command learned to set the
INTERFACE_COMPILE_FEATURES property on Imported Targets.

The target_compile_options() command learned to set the
INTERFACE_COMPILE_OPTIONS property on Imported Targets.

The target_include_directories() command learned to set the
INTERFACE_INCLUDE_DIRECTORIES property on
Imported Targets.

The target_sources() command learned to set the
INTERFACE_SOURCES property on Imported Targets.

The target_link_libraries() command learned to set the
INTERFACE_LINK_LIBRARIES property on Imported Targets.

Variables¶

A CMAKE_GENERATOR_INSTANCE variable was introduced
to hold the selected instance of the generator's corresponding
native tools if multiple are available.  This is used by the
Visual Studio 15 2017 generator to hold the
selected instance of Visual Studio persistently.

A CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS variable was added
to enable setting of default permissions for directories created implicitly
during installation of files by install() and
file(INSTALL), e.g. during make install.

A CMAKE_JOB_POOLS variable was added specify a value to use for
the JOB_POOLS property. This enables control over build
parallelism with command line configuration parameters when using the Ninja
generator.

The CMAKE_NETRC and CMAKE_NETRC_FILE variables
were added to specify use of a .netrc file by the
file(DOWNLOAD) and file(UPLOAD) commands and
the ExternalProject module.

A CMAKE_CUDA_SEPARABLE_COMPILATION variable was added to
initialize the CUDA_SEPARABLE_COMPILATION target property
on targets when they are created.

Properties¶

The COMPILE_DEFINITIONS source file property learned to support
generator expressions.

A COMPILE_OPTIONS source file property was added to manage list
of options to pass to the compiler.

An IMPORTED_GLOBAL target property was added to indicate
whether an IMPORTED target is globally visible.
It is automatically set to a true value for targets created with the
GLOBAL option to add_library() or add_executable().
Additionally, project code may now promote a local imported target
to be globally visible by setting this property to TRUE.

An INCLUDE_DIRECTORIES source file property was added to specify
list of preprocessor include file search directories.

Source file properties VS_SHADER_DISABLE_OPTIMIZATIONS and
VS_SHADER_ENABLE_DEBUG have been added to specify more
details of .hlsl sources with Visual Studio Generators.

Modules¶

The CheckIncludeFiles module CHECK_INCLUDE_FILES()
command gained a LANGUAGE option to specify whether to check using the
C or CXX compiler.

The CMakePackageConfigHelpers module
write_basic_package_version_file() command learned a new
SameMinorVersion mode for the COMPATIBILITY argument.

The ExternalProject module learned to substitute <DOWNLOAD_DIR>
in comments, commands, working directory and byproducts.

The ExternalProject module gained NETRC and NETRC_FILE
options to specify use of a .netrc file.

A new FetchContent module was added which supports populating
content at configure time using any of the download/update methods
supported by ExternalProject_Add().  This allows the content
to be used immediately during the configure stage, such as with
add_subdirectory(), etc.  Hierarchical project structures are
well supported, allowing parent projects to override the content details
of child projects and ensuring content is not populated multiple times
throughout the whole project tree.

The FindBLAS and FindLAPACK modules learned to support
FLAME blis and libflame.

The FindDoxygen module doxygen_add_docs() function
now supports a new DOXYGEN_VERBATIM_VARS list variable.  Any
DOXYGEN_... variable contained in that list will bypass the automatic
quoting logic, leaving its contents untouched when transferring them to the
output Doxyfile.

A FindIconv module was added to locate iconv support.

The GenerateExportHeader module GENERATE_EXPORT_HEADER command
gained an INCLUDE_GUARD_NAME option to change the name of the include
guard symbol written to the generated export header.
Additionally, it now adds a comment after the closing #endif on the
generated export header's include guard.

The UseJava module add_jar command gained a
GENERATE_NATIVE_HEADERS option to generate native header files
using javac -h for javac 1.8 or above.  This supersedes
create_javah, which no longer works with JDK 1.10 and above due
to removal of the javah tool by JEP 313.

Autogen¶

When using AUTOMOC or AUTOUIC, CMake now starts
multiple parallel moc or uic processes to reduce the build time.
A new CMAKE_AUTOGEN_PARALLEL variable and
AUTOGEN_PARALLEL target property may be set to specify the
number of parallel moc or uic processes to start.  The default
is derived from the number of CPUs on the host.

CTest¶

The ctest_start() command no longer sets
CTEST_RUN_CURRENT_SCRIPT due to issues with scoping if it is
called from inside a function. Instead, it sets an internal variable in
CTest. However, setting CTEST_RUN_CURRENT_SCRIPT to 0 at the
global scope still prevents the script from being re-run at the end.

CPack¶

cpack(1) gained --trace and --trace-expand options.

The CPack IFW Generator gained new
CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR variable to control
if the target directory should not be deleted when uninstalling.

The CPack RPM Generator learned to enable enforcing of execute
privileges on programs and shared libraries.
See CPACK_RPM_INSTALL_WITH_EXEC variable.

A CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS variable was added
which serves the same purpose during packaging (e.g. make package) as the
CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS variable serves during
installation (e.g. make install).

Other¶

Alias Targets may now alias Imported Targets that are
created with the GLOBAL option to add_library().

Interface Libraries may now have custom properties set on them if
they start with either an underscore (_) or a lowercase ASCII character.
The original intention was to only allow properties which made sense for
INTERFACE libraries, but it also blocked usage of custom properties.

The cmake(1) --open <dir> command-line option was added
to open generated IDE projects like Visual Studio solutions or Xcode
projects.

Deprecated and Removed Features¶

An explicit deprecation diagnostic was added for policies CMP0037
through CMP0054 (CMP0036 and below were already deprecated).
The cmake-policies(7) manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.

The KDevelop3 generator has been removed.

Other Changes¶

Policy CMP0037 no longer reserves target names associated
with optional features, such as test and package, unless
the corresponding feature is enabled.

The FindOpenGL module now prefers GLVND libraries if available.
See policy CMP0072.

The minimum deployment target set in the
CMAKE_OSX_DEPLOYMENT_TARGET variable used to be only
applied for macOS regardless of the selected SDK.  It is now properly
set for the target platform selected by CMAKE_OSX_SYSROOT.
For example, if the sysroot variable specifies an iOS SDK then the
value in CMAKE_OSX_DEPLOYMENT_TARGET is interpreted as minimum
iOS version.

The Xcode generator behavior of generating one project
file per project() command may now be controlled with the
CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY variable.
This could be useful to speed up the CMake generation step for
large projects and to work-around a bug in the ZERO_CHECK logic.

Since the CMakeCache.txt format does not support newlines in values,
values containing newlines are now truncated before writing to the file.
In addition, a warning comment is written to the cache file, and a warning
message is displayed to the user on the console.

Updates¶

Changes made since CMake 3.11.0 include the following.

3.11.1¶

The CheckIncludeFile module check_include_file macro,
CheckIncludeFileCXX module check_include_file_cxx macro,
and CheckIncludeFiles module check_include_files macro
were taught to honor the CMAKE_REQUIRED_LIBRARIES variable in
CMake 3.11.0.  This has been reverted due to changing behavior of
checks for existing projects.  It may be restored in the future
with a policy for compatibility.

3.11.2¶

Calling add_library() to create an alias of an imported
target that is not globally visible now causes an error again as
it did prior to 3.11.0.  This diagnostic was accidentally dropped
from CMake 3.11.0 and 3.11.1 by the change to allow globally visible
imported targets to be aliased.

The FindQt4 module qt4_wrap_cpp, qt4_wrap_ui and
qt4_add_resources macros now set SKIP_AUTOMOC and
SKIP_AUTOUIC on their generated files.  These files never
need to be processed by moc or uic, and we must say so explicitly to
account for policy CMP0071.

3.11.3¶

CMake 3.11.0 introduced support for resolving symbolic links on
Windows in code paths that typically do so on UNIX.  This has been
reverted due to breakage on subst drives.

Table of Contents

CMake 3.11 Release Notes

New Features

Platforms

Generators

Commands

Variables

Properties

Modules

Autogen

CTest

CPack

Other

Deprecated and Removed Features

Other Changes

Updates

3.11.1

3.11.2

3.11.3

Previous topic

CMake 3.12 Release Notes

Next topic

CMake 3.10 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.11 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.

repo_name: lazytadpole/codenamesilverfish

license: mit


code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.12 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.11 Release Notes" href="3.11.html" />
    <link rel="prev" title="CMake 3.13 Release Notes" href="3.13.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.12 Release Notes

CMake 3.12 Release Notes¶

Contents

CMake 3.12 Release Notes

New Features

Generators

Command-Line

Commands

Variables

Properties

Modules

Generator Expressions

CTest

CPack

Other

Deprecated and Removed Features

Other Changes

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 the CMAKE_GENERATOR_TOOLSET
value (e.g. via the cmake(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 supersedes add_definitions().

The cmake_minimum_required() and 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 file(GLOB) and file(GLOB_RECURSE) commands
learned a new flag CONFIGURE_DEPENDS which enables expression of
build system dependency on globbed directory's contents.

The file(TOUCH) and file(TOUCH_NOCREATE) commands
were added to expose TOUCH functionality without having to use
CMake's command-line tool mode with execute_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 all find_* commands inside
find modules also search the roots as prefixes.
See policy CMP0074.

The 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 list() command learned a JOIN sub-command
to concatenate list's elements separated by a glue string.

The list() command learned a SUBLIST sub-command
to get a sublist of the list.

The list() command learned a TRANSFORM sub-command
to apply various string transformation to list's elements.

The project() command learned an optional HOMEPAGE_URL
parameter which has the effect of setting variables like
PROJECT_HOMEPAGE_URL, <PROJECT-NAME>_HOMEPAGE_URL
and CMAKE_PROJECT_HOMEPAGE_URL.

The string() command learned a JOIN sub-command
to concatenate input strings separated by a glue string.

target_compile_options() and add_compile_options()
commands gained a SHELL: 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 the
FOLDER property on all targets.

The CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION variable
was defined to initialize all
DOTNET_TARGET_FRAMEWORK_VERSION target properties.

CMAKE_PROJECT_VERSION* variables have been introduced:

CMAKE_PROJECT_VERSION

CMAKE_PROJECT_VERSION_MAJOR

CMAKE_PROJECT_VERSION_MINOR

CMAKE_PROJECT_VERSION_PATCH

CMAKE_PROJECT_VERSION_TWEAK

The CMAKE_SUPPRESS_REGENERATION variable was extended to
support the Ninja 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:

CMAKE_VS_SDK_EXCLUDE_DIRECTORIES

CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES

CMAKE_VS_SDK_INCLUDE_DIRECTORIES

CMAKE_VS_SDK_LIBRARY_DIRECTORIES

CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES

CMAKE_VS_SDK_REFERENCE_DIRECTORIES

CMAKE_VS_SDK_SOURCE_DIRECTORIES

A MSVC_TOOLSET_VERSION variable was added to provide the
MSVC toolset version associated with the current MSVC compiler version
in MSVC_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 corresponding IMPORTED_COMMON_LANGUAGE_RUNTIME target
property was added to support C++/CLI for imported targets.

The DOTNET_TARGET_FRAMEWORK_VERSION target property
was introduced as replacement for
VS_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 the
install(EXPORT) and export() commands.

The PDB_OUTPUT_DIRECTORY property learned to support
generator expressions.

A TESTS directory property was added to hold the list of
tests defined by the add_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
and VS_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 the
target_link_libraries() command.

New FindPython3 and FindPython2 modules, as well as
a new FindPython 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 through
UseSWIG_MODULE_VERSION variable to ensure legacy support as well as more
robust handling of SWIG advanced features (like %template).

The UseSWIG module learned to support CSHARP variant
wrapper files.

The WriteCompilerDetectionHeader module gained a BARE_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
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 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 variables
CMAKE_PROJECT_VERSION_MAJOR,
CMAKE_PROJECT_VERSION_MINOR and
CMAKE_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
the cxx_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 policy CMP0073.

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 the
install() documentation so that external packaging software can take
advantage of CPack-style component installs.

The CheckIncludeFile module check_include_file macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy CMP0075.

The CheckIncludeFileCXX module check_include_file_cxx macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy CMP0075.

The CheckIncludeFiles module check_include_files macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy CMP0075.

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 module swig_add_library() command
(and legacy swig_add_module command) now set the prefix of
Java modules to "" for MINGW, MSYS, and CYGWIN environments.

Table of Contents

CMake 3.12 Release Notes

New Features

Generators

Command-Line

Commands

Variables

Properties

Modules

Generator Expressions

CTest

CPack

Other

Deprecated and Removed Features

Other Changes

Previous topic

CMake 3.13 Release Notes

Next topic

CMake 3.11 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.12 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.


code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.13 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.12 Release Notes" href="3.12.html" />
    <link rel="prev" title="CMake 3.14 Release Notes" href="3.14.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.13 Release Notes

CMake 3.13 Release Notes¶

Contents

CMake 3.13 Release Notes

New Features

Generators

Command-Line

Commands

Variables

Properties

Modules

CTest

CPack

Deprecated and Removed Features

Other Changes

Updates

3.13.2

3.13.3

3.13.4

3.13.5

Changes made since CMake 3.12 include the following.

New Features¶

Generators¶

The Visual Studio Generators for VS 2010 and above learned to
support the INTERPROCEDURAL_OPTIMIZATION target property
and supporting CheckIPOSupported module.

The Xcode generator learned to configure more Xcode Scheme
fields.  See the CMAKE_XCODE_GENERATE_SCHEME variable.

The Green Hills MULTI generator has been updated:

Added support for architecture selection through
CMAKE_GENERATOR_PLATFORM:
e.g. arm, ppc, and 86.

Added support for toolset selection through
CMAKE_GENERATOR_TOOLSET,
e.g. comp_201205, comp_201510, comp_201722_beta.

Added support for platform selection through GHS_TARGET_PLATFORM,
e.g. integrity, linux, standalone, etc.

No longer checks that arm based compilers are installed but ensures
that the correct gbuild.exe exists.

No longer hard-codes ARM files, BSP, toolset, or OS locations.

Command-Line¶

The cmake(1) command gained the -S <source_dir>
command line option to specify the location of the source directory.
This option can be used independently of -B.

The cmake(1) command gained the -B <build_dir>
command line option to specify the location of the build directory.
This option can be used independently of -S.

The cmake(1) -E create_symlink command can now be used
on Windows.

Commands¶

The add_custom_command() and add_custom_target() commands
learned to support generator expressions in WORKING_DIRECTORY options.

The add_link_options() command was created to add link
options in the current directory.

The install(TARGETS) command learned to install targets
created outside the current directory.

The link_directories() command gained options to control
insertion position.

The list(SORT) command gained options to control the
comparison operation used to order the entries.

The math() command gained options for hexadecimal.

The target_link_directories() command was created to
specify link directories for targets and their dependents.

The target_link_options() command was created to
specify link options for targets and their dependents.

The target_link_libraries() command may now be called
to modify targets created outside the current directory.
See policy CMP0079.

Variables¶

A CMAKE_AUTOGEN_VERBOSE variable was added to optionally
increase the verbosity of AUTOMOC, AUTOUIC
and AUTORCC from within CMake project code.

A CMAKE_VS_GLOBALS variable was added to initialize
VS_GLOBAL_<variable> target properties on targets as
they are created.

Properties¶

The DEPLOYMENT_ADDITIONAL_FILES target property was
added to tell the Visual Studio 9 2008 generator
to specify additional files for deployment to WinCE devices
for remote debugging.

The INTERFACE_LINK_DEPENDS target property was created
to specify transitive link dependencies on files.

The LINK_DEPENDS target property learned to support
generator expressions.

LINK_DIRECTORIES and INTERFACE_LINK_DIRECTORIES
target properties were added to collect link directories for a target
and its dependents.  Use the target_link_directories() command
to set them.

LINK_OPTIONS and INTERFACE_LINK_OPTIONS target
properties were added to collect link options for a target and its
dependents.  Use the target_link_options() command to set them.

A LINK_OPTIONS directory property was added to collect
link options for targets created under the current directory.
Use the add_link_options() command to set it.

A STATIC_LIBRARY_OPTIONS target property was created
to specify archiver options to use when creating static libraries.

A VS_DEBUGGER_COMMAND_ARGUMENTS target property was created to
set the debugging command line arguments with
Visual Studio Generators for VS 2010 and above.

A VS_DEBUGGER_ENVIRONMENT target property was created to
set the debugging environment with
Visual Studio Generators for VS 2010 and above.

The VS_DEBUGGER_COMMAND and
VS_DEBUGGER_WORKING_DIRECTORY target properties
now support generator expressions.

Modules¶

The FindBoost module gained a Boost_ARCHITECTURE option
to specify a Boost architecture-specific library filename fragment.

The FindCURL module learned to find debug and release variants
separately.

The FindMatlab module gained new components ENGINE_LIBRARY and
DATAARRAY_LIBRARY to request finding the Matlab C++ Engine and DataArray
libraries respectively.

The FindMatlab module now explicitly exports mexFunction in Visual
Studio.

The FindMatlab module gained a new MCC_COMPILER
component to request finding the Matlab Compiler add-on.

The FindPkgConfig module gained an option to create imported
targets in global scope.

The FindPkgConfig module gained support for < and >
operators for version checks in addition to the already supported
operators >=, <=, and =.

Modules FindPython3, FindPython2 and FindPython
gain capability to control order of resource lookup on macOS (Framework) and
Windows (Registry).

The FindSubversion module Subversion_WC_INFO command
gained an IGNORE_SVN_FAILURE option to suppress failures,
e.g. when the source tree is not under Subversion control.

The UseSWIG module learned to manage target property
INCLUDE_DIRECTORIES for SWIG compilation.

CTest¶

ctest(1) gained a --progress option to enable a live
test progress summary when output goes to a terminal.

CPack¶

The CPack DEB Generator learned to split debug symbols into
a corresponding .ddeb package when CPACK_DEBIAN_DEBUGINFO_PACKAGE is
set.

The CPack DEB Generator learned to honor the SOURCE_DATE_EPOCH
environment variable when packaging files.  This is useful for generating
reproducible packages.

CPack gained a new CPack External Generator which is used to
export the CPack metadata in a format that other software can understand. The
intention of this generator is to allow external packaging software to take
advantage of CPack's features when it may not be possible to use CPack for
the entire packaging process.

Deprecated and Removed Features¶

An explicit deprecation diagnostic was added for policies CMP0055
through CMP0063 (CMP0054 and below were already deprecated).
The cmake-policies(7) manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.

Other Changes¶

The precompiled binaries provided on cmake.org now include
qthelp-format documentation.

The option() command now honors an existing normal variable
of the same name and does nothing instead of possibly creating a cache
entry (or setting its type) and removing the normal variable.
See policy CMP0077.

The Makefile Generators learned to remove custom command and
custom target byproducts during make clean.

The target_sources() command now interprets relative source file
paths as relative to the current source directory.  This simplifies
incrementally building up a target's sources from subdirectories.  The
CMP0076 policy was added to provide backward compatibility with
the old behavior where required.

The BundleUtilities module may no longer be included at configure
time. This was always a bug anyway. See policy CMP0080.

The UseSWIG module has changed strategy for target naming.
See policy CMP0078.

The LINK_DIRECTORIES target property now expects absolute paths.
See policy CMP0081.

The CPack generators have been moved into their own separate section
in the documentation, rather than having the documentation in their
internal implementation modules.
These internal implementation modules are also no longer available
to scripts that may have been incorrectly including them, because
they should never have been available in the first place.

Updates¶

Changes made since CMake 3.13.0 include the following.

3.13.2¶

CMake 3.13.0 included a change to pass compiler implicit include
directories to the moc tool for AUTOMOC.  This has
been reverted due to regressing existing builds and will need
further investigation before being re-introduced in a later release.

3.13.3¶

The Visual Studio 15 2017 generator has been fixed to work
when VS 2019 is installed.

CMake now checks that at least one of the source or binary directory
is specified when running CMake and issues an error if both are missing.
This has always been a documented requirement, but the implementation
previously accidentally accepted cases in which neither are specified
so long as some other argument is given, and silently used the current
working directory as the source and build tree.

3.13.4¶

The error added by 3.13.3 in cases that neither a source or binary
directory is specified has been downgraded to a warning.  While this
was never intended, documented, nor supported behavior, some projects
relied on it.  The error has been downgraded to a warning for the
remainder of the 3.13.x release series to allow a transition period,
but it may become a fatal error again in a later release.  Scripts
relying on the old behavior can be trivially fixed by specifying
the path to the source tree (even if just .) explicitly and
continue to work with all versions of CMake.

3.13.5¶

In CMake 3.13.0 through 3.13.4, calling target_link_libraries()
to add PRIVATE dependencies to a static library created in another
directory (under policy CMP0079 NEW behavior) would
incorrectly propagate usage requirements of those dependencies to
dependents that link the static library.  This has been fixed.

Table of Contents

CMake 3.13 Release Notes

New Features

Generators

Command-Line

Commands

Variables

Properties

Modules

CTest

CPack

Deprecated and Removed Features

Other Changes

Updates

3.13.2

3.13.3

3.13.4

3.13.5

Previous topic

CMake 3.14 Release Notes

Next topic

CMake 3.12 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.13 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.


code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.14 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.13 Release Notes" href="3.13.html" />
    <link rel="prev" title="CMake 3.15 Release Notes" href="3.15.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.14 Release Notes

CMake 3.14 Release Notes¶

Contents

CMake 3.14 Release Notes

New Features

Generators

File-Based API

Platforms

Command-Line

Commands

Variables

Properties

Modules

Generator Expressions

Autogen

CTest

Deprecated and Removed Features

Other Changes

Updates

3.14.1

3.14.3

3.14.4

3.14.5

3.14.6

3.14.7

Changes made since CMake 3.13 include the following.

New Features¶

Generators¶

The Visual Studio 16 2019 generator was added.  This is
experimental and based on "Visual Studio 2019 Preview 4" because this
version of VS has not been released.

The VS 2019 generator differs from generators for earlier versions
in that it does not provide variants that specify the target platform
in the generator name.  Instead CMAKE_GENERATOR_PLATFORM
must be used, e.g. through the -A command-line option.  Furthermore,
the default target platform (architecture) is now based on the host
platform.  The VS host toolset selection is now based on the host
architecture as well.

The Green Hills MULTI generator has been updated:

Now supports Object Libraries.

Now warns on unsupported project types such as shared libraries.

Now generates a top-level <PROJECT-NAME>.top.gpj for each directory
calling the project() command.  The top-level project file
default.gpj is no longer created.

Now honors target renaming and destination output control properties
such as RUNTIME_OUTPUT_DIRECTORY and OUTPUT_NAME.
This also fixes support for installation rules generated by
install().

Now honors source file properties INCLUDE_DIRECTORIES,
COMPILE_DEFINITIONS, and COMPILE_OPTIONS.

Now supports Dynamic Download Integrity Applications which did not include
Integrate Files via GHS_INTEGRITY_APP and setting a target
link flag of -dynamic.

The contents of project files now sorts sources groups and files by name.
Set the GHS_NO_SOURCE_GROUP_FILE target property to ON to
generate a single project file for the target instead of a project file for
each source group.  Set the CMAKE_GHS_NO_SOURCE_GROUP_FILE
variable to enable this for all targets.

File-Based API¶

A file-based api for clients to get semantic buildsystem information
has been added.  See the cmake-file-api(7) manual.
This is intended to replace the cmake-server(7) mode for IDEs.

Platforms¶

CMake now supports
Cross Compiling for iOS, tvOS, or watchOS
using simple toolchain files.

Command-Line¶

The cmake(1) Build Tool Mode
(cmake --build) gained --verbose and -v options to
specify verbose build output. Some generators such as Xcode don't
support this option currently.

The cmake(1) -E compare_files command learned a new
--ignore-eol option to specify that end-of-line differences
(e.g. LF vs CRLF) should be ignored when comparing files.

The cmake-gui(1) dialog gained new -S and -B arguments to
explicitly specify source and build directories.

Commands¶

The file() command learned a new sub-command, CREATE_LINK,
which can be used to create hard or symbolic links.

The file() command learned a new sub-command, READ_SYMLINK,
which can be used to determine the path that a symlink points to.

The file() command gained a SIZE mode to get the size
of a file on disk.

The find_package() command learned to optionally resolve
symbolic links in the paths to package configuration files.
See the CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS variable.

The get_filename_component() command gained new
LAST_EXT and NAME_WLE variants to work with the
extension after the last . in the name.

The if() command gained support for checking if cache variables
are defined with the  DEFINED CACHE{VAR} syntax.

The install(CODE) and install(SCRIPT) commands
learned to support generator expressions.  See policy CMP0087.

The install(TARGETS) command learned how to install to an
appropriate default directory for a given target type, based on
variables from the GNUInstallDirs module and built-in defaults,
in lieu of a DESTINATION argument.

The install(FILES) and install(DIRECTORY) commands
learned a new set of parameters for installing files as a file type,
setting the destination based on the appropriate variables from
GNUInstallDirs and built-in defaults, in lieu of a
DESTINATION argument.

The list() operations REMOVE_ITEM, REMOVE_DUPLICATES,
SORT, REVERSE, and FILTER all now accept a non-existent variable
as the list since these operations on empty lists is also the empty list.

The list() operation REMOVE_AT now indicates that the given
indices are invalid for a non-existent variable or empty list.

The try_compile() and try_run() commands gained a new
LINK_OPTIONS option.

Variables¶

A CMAKE_BUILD_RPATH_USE_ORIGIN variable and corresponding
BUILD_RPATH_USE_ORIGIN target property were added to
enable use of relative runtime paths (RPATHs). This helps achieving
relocatable and reproducible builds that are invariant of the build
directory.

A CMAKE_VS_PLATFORM_NAME_DEFAULT variable was added for
Visual Studio Generators to report their default platform used
when CMAKE_GENERATOR_PLATFORM is not set explicitly.

Properties¶

A CMAKE_ROLE global property was added to allow scripts to
determine whether they're running in project mode, script mode,
find-package mode, CTest, or CPack.

The CUDA_RESOLVE_DEVICE_SYMBOLS target property is now supported
on shared library, module library, and executable targets.  Previously it was
only honored on static libraries.

The EXCLUDE_FROM_ALL target property was created to override
the setting of its directory. A target will now be built as part of "all"
if its EXCLUDE_FROM_ALL property is set to OFF, even if its
containing directory is marked as EXCLUDE_FROM_ALL.

INTERFACE_POSITION_INDEPENDENT_CODE target property gains the
support of generator expressions.

Modules¶

The family of modules to check capabilities (like
CheckCSourceCompiles) gain capability to manage LINK_OPTIONS.

A CheckFortranSourceRuns module was added to provide a
check_fortran_source_runs() command to check if a Fortran
source snippet compiles and runs.

The CMakePackageConfigHelpers module's
write_basic_package_version_file() command gained a new
ARCH_INDEPENDENT option for supporting architecture-independent
packages.

The ExternalProject module ExternalProject_Add() command
gained LOG_DIR and LOG_MERGED_STDOUTERR options to control logging.

The ExternalProject module ExternalProject_Add() command
gained LOG_PATCH to optionally log the patch step.

The ExternalProject module ExternalProject_Add() command
learned to apply SOURCE_SUBDIR when BUILD_IN_SOURCE is also used.
The BUILD_COMMAND is run in the given SOURCE_SUBDIR of the
SOURCE_DIR.

The FetchContent module gained a new
FetchContent_MakeAvailable() command.  It accepts a list of
dependency names, which it then iterates over, populating and adding
each one to the main build using the canonical pattern.  This
significantly reduces the amount of boilerplate needed in a project.

The FindBISON module's BISON_TARGET command now runs bison
with CMAKE_CURRENT_BINARY_DIR as the working directory.
See policy CMP0088.

The FindCURL module gained support for requesting
protocols as package components.

The FindFontconfig module was added to find fontconfig.

The FindGDAL module now provides imported targets.

The FindGIF module now provides imported targets.

The FindGit module now provides an imported target for the
Git executable.

The FindIce module learned to find slice2confluence
and slice2matlab.

The FindLibinput module was added to find libinput.

The FindLibLZMA module now provides imported targets.

The FindMatlab module gained new options R2017b and
R2018a to specify the MEX API version to use; these options
mirror the new options to the mex command in MATLAB R2018a.
The option MX_LIBRARY is no longer needed.

The FindPostgreSQL module now provides imported targets.

The FindPython, FindPython2, and FindPython3
modules gained support for NumPy component.

The FindPython2, FindPython3, and FindPython
modules now support running in script mode by skipping the creation of
imported targets and helper functions.

The FindSQLite3 module was added to find the SQLite v3.x library.

The FindX11 had the following variables renamed in order to match
their library names rather than header names. The old variables are provided
for compatibility:

X11_Xxf86misc_INCLUDE_PATH instead of X11_xf86misc_INCLUDE_PATH

X11_Xxf86misc_LIB instead of X11_xf86misc_LIB

X11_Xxf86misc_FOUND instead of X11_xf86misc_FOUND

X11_Xxf86vm_INCLUDE_PATH instead of X11_xf86vmode_INCLUDE_PATH

X11_Xxf86vm_LIB instead of X11_xf86vmode_LIB

X11_Xxf86vm_FOUND instead of X11_xf86vmode_FOUND

X11_xkbfile_INCLUDE_PATH instead of X11_Xkbfile_INCLUDE_PATH

X11_xkbfile_LIB instead of X11_Xkbfile_LIB

X11_xkbfile_FOUND instead of X11_Xkbfile_FOUND

X11_Xtst_INCLUDE_PATH instead of X11_XTest_INCLUDE_PATH

X11_Xtst_LIB instead of X11_XTest_LIB

X11_Xtst_FOUND instead of X11_XTest_FOUND

X11_Xss_INCLUDE_PATH instead of X11_Xscreensaver_INCLUDE_PATH

X11_Xss_LIB instead of X11_Xscreensaver_LIB

X11_Xss_FOUND instead of X11_Xscreensaver_FOUND

The following variables are deprecated completely since they were
essentially duplicates:

X11_Xinput_INCLUDE_PATH (use X11_Xi_INCLUDE_PATH)

X11_Xinput_LIB (use X11_Xi_LIB)

X11_Xinput_FOUND (use X11_Xi_FOUND)

The FindX11 now provides X11_Xext_INCLUDE_PATH.

The FindX11 now provides imported targets.

The UseSWIG module learned to pass -module <module_name> to
the SWIG compiler if the file property SWIG_MODULE_NAME is defined.
See policy CMP0086.

The UseSWIG module gained an option to specify
SWIG source file extensions.

Generator Expressions¶

The $<Fortran_COMPILER_ID:...> and $<Fortran_COMPILER_VERSION:...>
generator expressions were added.

The $<IN_LIST:...> generator expression now correctly handles an
empty argument. See CMP0085 for details.

Autogen¶

The AUTOMOC_EXECUTABLE, AUTORCC_EXECUTABLE, and
AUTOUIC_EXECUTABLE target properties were added.  They all
take a path to an executable and force automoc/autorcc/autouic to use
this executable.

Setting these will also prevent the configure time testing for these
executables. This is mainly useful when you build these tools yourself.

The new variables CMAKE_GLOBAL_AUTOGEN_TARGET,
CMAKE_GLOBAL_AUTOGEN_TARGET_NAME,
CMAKE_GLOBAL_AUTORCC_TARGET and
CMAKE_GLOBAL_AUTORCC_TARGET_NAME control the generation
of global autogen and autorcc targets.

A new CMAKE_AUTOGEN_ORIGIN_DEPENDS variable and
AUTOGEN_ORIGIN_DEPENDS target property may be set to enable or
disable forwarding of the origin target dependencies to the corresponding
The <ORIGIN>_autogen target target.

CTest¶

ctest(1) gained a --show-only=json-v1 option to show the
list of tests in a machine-readable JSON format.
See the Show as JSON Object Model section of the manual.

The ctest_submit() command learned a new Done part that can be used
to inform CDash that a build is complete and that no more parts will be uploaded.

CTest learned to accept the dashboard server submission URL from a single
variable.  See the SubmitURL setting in ctest(1),
the CTEST_SUBMIT_URL variable, and the SUBMIT_URL
argument of the ctest_submit() command.

Deprecated and Removed Features¶

An explicit deprecation diagnostic was added for policies CMP0064
and CMP0065 (CMP0063 and below were already deprecated).
The cmake-policies(7) manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.

The Xcode generator deprecated support for Xcode
versions prior to Xcode 5.  Support for those will be dropped in a
future version of CMake.

The FindQt module is no longer used by the find_package()
command as a find module.  This allows the Qt Project upstream to optionally
provide its own QtConfig.cmake package configuration file and have
applications use it via find_package(Qt) rather than
find_package(Qt CONFIG).  See policy CMP0084.

Support for running CMake on Windows XP and Windows Vista has been dropped.
The precompiled Windows binaries provided on cmake.org now require
Windows 7 or higher.

CTest no longer supports submissions via ftp, scp, cp, and
xmlrpc.  CDash is the only maintained testing dashboard for CTest,
and it only supports submissions over http and https.

Other Changes¶

Object library linking has been fixed to propagate private link libraries
of object libraries to consuming targets.

Install rules under add_subdirectory() now interleave with those in
the calling directory. See policy CMP0082 for details.

CMake now imposes a maximum recursion limit to prevent a stack overflow on
scripts that recurse infinitely. The limit can be adjusted at runtime with
CMAKE_MAXIMUM_RECURSION_DEPTH.

When using cppcheck via the CMAKE_<LANG>_CPPCHECK variable
or <LANG>_CPPCHECK property, the build will now fail if
cppcheck returns non-zero as configured by its command-line options.

Required link options to manage Position Independent Executable are now
added when POSITION_INDEPENDENT_CODE is set.  The project is
responsible for using the CheckPIESupported module to check for
PIE support to ensure that the POSITION_INDEPENDENT_CODE
target property will be honored at link time for executables.  This behavior
is controlled by policy CMP0083.

Visual Studio Generators for VS 2010 and above learned
to support the VS_DEBUGGER_* properties on targets created
via add_custom_target().

The CPack module no longer defaults to the paxr value in the
CPACK_DEBIAN_ARCHIVE_TYPE variable, because dpkg has
never supported the PAX tar format. The paxr value will be mapped
to gnutar and a deprecation message emitted.

CMake no longer issues a warning if a target listed in an
install(TARGETS) command has its EXCLUDE_FROM_ALL
property set to true.

Updates¶

Changes made since CMake 3.14.0 include the following.

3.14.1¶

The FindFontconfig module added by 3.14.0 accidentally
used uppercase FONTCONFIG_* variable names that do not match
our conventions.  3.14.1 revises the module to use Fontconfig_*
variable names.  This is incompatible with 3.14.0 but since the
module is new in the 3.14 series usage should not yet be widespread.

3.14.3¶

The CMAKE_VS_PLATFORM_NAME_DEFAULT variable was added
to help toolchain files work with the Visual Studio 16 2019
generator where the default platform now depends on the host platform.

3.14.4¶

In CMake 3.14.0 through 3.14.3, calling target_link_libraries()
to add PRIVATE dependencies to a static library created in another
directory (under policy CMP0079 NEW behavior) would
incorrectly propagate usage requirements of those dependencies to
dependents that link the static library.  This has been fixed.
The bug also existed in 3.13.0 through 3.13.4 and is fixed in 3.13.5.

3.14.5¶

Entries of the CPATH environment variable are no longer excluded
from explicit use via include_directories() and
target_include_directories() as they were in CMake 3.14.0
through 3.14.4.

3.14.6¶

In CMake 3.14.0 through 3.14.5, the FindBISON module
policy CMP0088 NEW behavior accidentally interpreted
a relative path to the .y input as relative to the build tree
directory instead of the source tree directory.  This has been fixed.

3.14.7¶

In CMake 3.14.0 through 3.14.6, the EXCLUDE_FROM_ALL
directory property was regressed from pre-3.14 behavior and caused
targets within the directory to be excluded even from its own "all".
This has been fixed.

Table of Contents

CMake 3.14 Release Notes

New Features

Generators

File-Based API

Platforms

Command-Line

Commands

Variables

Properties

Modules

Generator Expressions

Autogen

CTest

Deprecated and Removed Features

Other Changes

Updates

3.14.1

3.14.3

3.14.4

3.14.5

3.14.6

3.14.7

Previous topic

CMake 3.15 Release Notes

Next topic

CMake 3.13 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.14 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.


code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.15 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.14 Release Notes" href="3.14.html" />
    <link rel="prev" title="CMake 3.16 Release Notes" href="3.16.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.15 Release Notes

CMake 3.15 Release Notes¶

Contents

CMake 3.15 Release Notes

New Features

Generators

Languages

Compilers

Command-Line

Commands

Variables

Properties

Modules

Generator Expressions

CTest

CPack

Deprecated and Removed Features

Other Changes

Updates

3.15.1

3.15.2

3.15.3

3.15.4

Changes made since CMake 3.14 include the following.

New Features¶

Generators¶

The Xcode generator now supports per-target schemes.
See the CMAKE_XCODE_GENERATE_SCHEME variable and
XCODE_GENERATE_SCHEME target property.

The Green Hills MULTI generator has been updated:

It now supports the add_custom_command() and
add_custom_target() commands.

It is now available on Linux.

Languages¶

Preliminary support for the Swift language was added to the
Ninja generator:

Use the SWIFTC environment variable to specify a compiler.

The Swift_DEPENDENCIES_FILE target property and
Swift_DEPENDENCIES_FILE source file property were added
to customize dependency files.

The Swift_MODULE_NAME target property was added to
customize the Swift module name.

The Swift_DIAGNOSTICS_FILE source property was added to
indicate where to write the serialized Swift diagnostics.

The Swift support is experimental, not considered stable, and may change
in future releases of CMake.

Compilers¶

The Clang compiler variant on Windows that targets the MSVC ABI
but has a GNU-like command line is now supported.

Support for the Clang-based ARM compiler was added with compiler id
ARMClang.

Support was added for the IAR compiler architectures Renesas RX,
RL78, RH850 and Texas Instruments MSP430.

Support was added for the IAR compilers built for Linux (IAR BuildLx).

Command-Line¶

The CMAKE_GENERATOR environment variable was added
to specify a default generator to use when cmake(1) is
run without a -G option.  Additionally, environment variables
CMAKE_GENERATOR_PLATFORM, CMAKE_GENERATOR_TOOLSET,
and CMAKE_GENERATOR_INSTANCE were created to configure
the generator.

The cmake(1) --build tool --target parameter gained support
for multiple targets, e.g. cmake --build . --target Library1 Library2.
It now also has a short form -t alias, e.g.
cmake --build . -t Library1 Library2.

The cmake(1) command gained a new --install option.
This may be used after building a project to run installation without
using the generated build system or the native build tool.

The cmake(1) command learned a new CLI option --loglevel.

The cmake(1) -E remove_directory command-line tool learned
to support removing multiple directories.

The cmake(1) -E tar tool has been improved:

It now continues adding files to an archive even if some of the files
are not readable.  This behavior is more consistent with the
classic tar tool.

It now parses all flags, and if an invalid flag was provided, a
warning is issued.

It now displays an error if no action flag was specified, along with a
list of possible actions: t (list), c (create) or x (extract).

It now supports extracting (-x) or listing (-t) only specific
files or directories.

It now supports Zstandard compression with a --zstd option.
Zstandard was designed to give a compression ratio comparable to that
of the DEFLATE (zip) algorithm, but faster, especially for decompression.

Commands¶

The add_custom_command() and add_custom_target() commands
gained a new JOB_POOL option that works with the Ninja
generator to set the pool variable on the build statement.

The add_library() command ALIAS option learned to support
import libraries of the UNKNOWN type.

The cmake_parse_arguments() command gained an additional
<prefix>_KEYWORDS_MISSING_VALUES output variable to report
keyword arguments that were given by the caller with no values.

The execute_process() command gained a COMMAND_ECHO option
and supporting CMAKE_EXECUTE_PROCESS_COMMAND_ECHO variable
to enable echoing of the command-line string before execution.

The file(INSTALL) command learned a new argument,
FOLLOW_SYMLINK_CHAIN, which can be used to recursively resolve and
install symlinks.

list() learned new sub-commands:
PREPEND, POP_FRONT and POP_BACK.

The message() command learned new types:
NOTICE, VERBOSE, DEBUG and TRACE.

The string() learned a new sub-command REPEAT.

Variables¶

The CMAKE_CROSSCOMPILING_EMULATOR variable and corresponding
CROSSCOMPILING_EMULATOR target property learned to support
arguments to the emulator.

The CMAKE_FIND_PACKAGE_PREFER_CONFIG variable was added to tell
find_package() calls to look for a package configuration
file first even if a find module is available.

The CMAKE_FRAMEWORK variable was added to initialize the
FRAMEWORK property on all targets.

The CMAKE_VS_JUST_MY_CODE_DEBUGGING variable and
VS_JUST_MY_CODE_DEBUGGING target property were added to
enable the Just My Code feature of the Visual Studio Debugger when
compiling with MSVC cl 19.05 and higher.

The CMAKE_MSVC_RUNTIME_LIBRARY variable and
MSVC_RUNTIME_LIBRARY target property were introduced to
select the runtime library used by compilers targeting the MSVC ABI.
See policy CMP0091.

The CMAKE_PROJECT_INCLUDE and
CMAKE_PROJECT_INCLUDE_BEFORE variables were added to allow
injection of custom code at the sites of project() calls
without knowing the project name a priori.

Properties¶

The ADDITIONAL_CLEAN_FILES target property and
ADDITIONAL_CLEAN_FILES directory property were added.
They allow to register additional files that should be removed during
the clean stage.

The PUBLIC_HEADER and PRIVATE_HEADER properties
may now be set on Interface Libraries. The headers specified by those
properties can be installed using the install(TARGETS) command by
passing the PUBLIC_HEADER and PRIVATE_HEADER arguments respectively.

The VS_PACKAGE_REFERENCES target property was added to
tell Visual Studio Generators to add references to nuget
packages.

The VS_PROJECT_IMPORT target property was added to allow
managed Visual Studio project files to import external .props files.

The VS_NO_SOLUTION_DEPLOY target property was added to
tell Visual Studio Generators whether to deploy an artifact
to the WinCE or Windows Phone target device.

Modules¶

The FindBoost module was reworked to expose a more consistent
user experience between its "Config" and "Module" modes and with other
find modules in general.

A new imported target Boost::headers is now defined (same
as Boost::boost).

New output variables Boost_VERSION_MACRO,
Boost_VERSION_MAJOR, Boost_VERSION_MINOR,
Boost_VERSION_PATCH, and Boost_VERSION_COUNT
were added.

The QUIET argument passed to find_package() is no
longer ignored in config mode.  Note that the CMake package shipped with
Boost 1.70.0 ignores the QUIET argument passed to
find_package().  This is fixed in the next Boost release.

The input switch Boost_DETAILED_FAILURE_MSG was removed.

Boost_VERSION now reports the version in x.y.z
format in module mode.  See policy CMP0093.

The FindCups module now provides imported targets.

The FindEnvModules module was added to use Lua- and TCL-based
environment modules in CTest Scripts.

The FindGLEW module now provides an interface more consistent
with what upstream GLEW provides in its own CMake package files.

The FindPkgConfig now populates INTERFACE_LINK_OPTIONS
property of imported targets with other (non-library) linker flags.

The FindPostgreSQL module learned to find debug and release
variants separately.

Modules FindPython3, FindPython2 and FindPython
gained additional lookup strategies and controls, and a new default.
See policy CMP0094.

Modules FindPython, FindPython2 and FindPython3
gain a new target (respectively Python::Module, Python2::Module
and Python3::Module) which can be used to develop Python modules.

Modules FindPython3, FindPython2 and FindPython
gain capability to control how virtual environments are handled.

The UseSWIG module learned to manage alternate library names
by passing -interface <library_name> for python language or
-dllimport <library_name> for CSharp language to the SWIG
compiler.

Generator Expressions¶

The generator expressions $<C_COMPILER_ID>,
$<CXX_COMPILER_ID>, $<CUDA_COMPILER_ID>,
$<Fortran_COMPILER_ID>, $<COMPILE_LANGUAGE>,
$<COMPILE_LANG_AND_ID>, and $<PLATFORM_ID> learned to
support matching one value from a comma-separated list.

The $<CUDA_COMPILER_ID:...> and $<CUDA_COMPILER_VERSION:...>
generator expressions were added.

The $<COMPILE_LANG_AND_ID:...> generator expression was introduced to
allow specification of compile options for target files based on the
CMAKE_<LANG>_COMPILER_ID and LANGUAGE of
each source file.

A $<FILTER:list,INCLUDE|EXCLUDE,regex> generator expression has
been added.

A $<REMOVE_DUPLICATES:list> generator expression has been added.

The $<SHELL_PATH:...> generator expression gained support for a
list of paths.

New $<TARGET_FILE*> generator expressions were added to retrieve the prefix, base
name, and suffix of the file names of various artifacts:

$<TARGET_FILE_PREFIX:...>

$<TARGET_FILE_BASE_NAME:...>

$<TARGET_FILE_SUFFIX:...>

$<TARGET_LINKER_FILE_PREFIX:...>

$<TARGET_LINKER_FILE_BASE_NAME:...>

$<TARGET_LINKER_FILE_SUFFIX:...>

$<TARGET_PDB_FILE_BASE_NAME:...>

The $<TARGET_OBJECTS:...> generator expression is now supported
on SHARED, STATIC, MODULE libraries and executables.

CTest¶

The ctest_submit() command learned a new option: BUILD_ID.
This can be used to store the ID assigned to this build by CDash to a
variable.

The ctest_update() command learned to honor a new variable:
CTEST_UPDATE_VERSION_OVERRIDE. This can be used to specify
the current version of your source tree rather than using the update
command to discover the current version that is checked out.

CPack¶

The CPack IFW Generator gained a new
CPACK_IFW_PACKAGE_STYLE_SHEET variable to customize the
installer stylesheet.

Deprecated and Removed Features¶

The cmake-server(7) mode has been deprecated and will be
removed from a future version of CMake.  Please port clients to use
the cmake-file-api(7) instead.

The ADDITIONAL_MAKE_CLEAN_FILES directory property is now
deprecated.  Use the ADDITIONAL_CLEAN_FILES directory property
instead.

The variable CMAKE_AUTOMOC_RELAXED_MODE is considered
deprecated.  Support still exists but will be removed in future versions.

The export(PACKAGE) command now does nothing unless
enabled via CMAKE_EXPORT_PACKAGE_REGISTRY.
See policy CMP0090.

The Xcode generator now requires at least Xcode 5.

An explicit deprecation diagnostic was added for policy CMP0066
(CMP0065 and below were already deprecated).
The cmake-policies(7) manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.

Other Changes¶

If a feature specified by target_compile_features() is available
in the compiler's default standard level, CMake 3.14 and below incorrectly
added unnecessary -std= flags that could lower the standard level.
This bug has been fixed in CMake 3.15.  This behavior change may expose
bugs in existing projects that were relying on undocumented implementation
details.  Specifying compile features only ensures that the compiler runs
in a mode that has those features, not that any specific standard level is
used or explicit -std= flag passed.

CMake learned how to compile C++14 with the IBM AIX XL compiler
and the SunPro compiler and to compile C++20 with the AppleClang compiler.

With MSVC-like compilers the value of CMAKE_<LANG>_FLAGS
no longer contains warning flags like /W3 by default.
See policy CMP0092.

IBM Clang-based XL compilers that define __ibmxl__ now use the
compiler id XLClang instead of XL.  See policy CMP0089.

The file(REMOVE) and file(REMOVE_RECURSE) commands
were changed to ignore empty arguments with a warning instead of treating
them as a relative path and removing the contents of the current directory.

Updates¶

Changes made since CMake 3.15.0 include the following.

3.15.1¶

In CMake 3.15.0 support for the GNU-like Clang compiler targeting the
MSVC ABI implemented CMAKE_CXX_STANDARD values 98 and 11 using
the corresponding -std= flags.  However, these modes do not work with
the MSVC standard library.  Therefore CMake 3.15.1 passes C++14 standard
flags even for C++98 and C++11.  This is consistent with MSVC itself which
always runs in a mode aware of C++14.

Preliminary Swift support added in 3.15.0 has been updated.

3.15.2¶

In CMake 3.15.0 and 3.15.1 the CMAKE_FIND_PACKAGE_PREFER_CONFIG
variable caused the find_package() command to fail on a missing
package even without the REQUIRED option.  This has been fixed.

3.15.3¶

CrayPrgEnv compiler wrapper support has been updated for the 19.06
release of the Cray Programming Environment for which the default linking
mode on XC Cray systems is now dynamic instead of static.

3.15.4¶

In CMake 3.15.0 through 3.15.3, the EXCLUDE_FROM_ALL
directory property was regressed from pre-3.14 behavior and caused
targets within the directory to be excluded even from its own "all".
This has been fixed.
The bug also existed in 3.14.0 through 3.14.6 and is fixed in 3.14.7.

Table of Contents

CMake 3.15 Release Notes

New Features

Generators

Languages

Compilers

Command-Line

Commands

Variables

Properties

Modules

Generator Expressions

CTest

CPack

Deprecated and Removed Features

Other Changes

Updates

3.15.1

3.15.2

3.15.3

3.15.4

Previous topic

CMake 3.16 Release Notes

Next topic

CMake 3.14 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.15 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.


code:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>CMake 3.16 Release Notes — CMake 3.29.0-rc3 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />

    <link rel="icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CMake 3.15 Release Notes" href="3.15.html" />
    <link rel="prev" title="CMake 3.17 Release Notes" href="3.17.html" />

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.16 Release Notes

CMake 3.16 Release Notes¶

Contents

CMake 3.16 Release Notes

New Features

Languages

Compilers

Platforms

Command-Line

Commands

Variables

Properties

Modules

Autogen

CTest

CPack

Deprecated and Removed Features

Other Changes

Updates

3.16.2

3.16.5

3.16.7

3.16.9

Changes made since CMake 3.15 include the following.

New Features¶

Languages¶

CMake learned to support the Objective C (OBJC) and Objective C++
(OBJCXX) languages.  They may be enabled via the project()
and enable_language() commands.  When OBJC or OBJCXX
is enabled, source files with the .m or .mm, respectively,
will be compiled as Objective C or C++.  Otherwise they will be treated
as plain C++ sources as they were before.

Compilers¶

The Clang compiler is now supported on Solaris.

Platforms¶

On AIX, executables using the ENABLE_EXPORTS target property
now produce a linker import file with a .imp extension in addition
to the executable file.  Plugins (created via add_library() with
the MODULE option) that use target_link_libraries() to link
to the executable for its symbols are now linked using the import file.
The install(TARGETS) command now installs the import file as
an ARCHIVE artifact.

On AIX, runtime linking is no longer enabled by default.  CMake provides
the linker enough information to resolve all symbols up front.
One may manually enable runtime linking for shared libraries and/or
loadable modules by adding -Wl,-G to their link flags
(e.g. in the CMAKE_SHARED_LINKER_FLAGS or
CMAKE_MODULE_LINKER_FLAGS variable).
One may manually enable runtime linking for executables by adding
-Wl,-brtl to their link flags (e.g. in the
CMAKE_EXE_LINKER_FLAGS variable).

Command-Line¶

cmake(1) -E now supports true and false commands,
which do nothing while returning exit codes of 0 and 1, respectively.

cmake(1) gained a --trace-redirect=<file> command line
option that can be used to redirect --trace output to a file instead
of stderr.

The cmake(1) --loglevel command line option has been
renamed to --log-level to make it consistent with the naming of other
command line options.  The --loglevel option is still supported to
preserve backward compatibility.

Commands¶

The add_test() command learned the option COMMAND_EXPAND_LISTS
which causes lists in the COMMAND argument to be expanded, including
lists created by generator expressions.

The file() command learned a new sub-command,
GET_RUNTIME_DEPENDENCIES, which allows you to recursively get the list of
libraries linked by an executable or library. This sub-command is intended as
a replacement for GetPrerequisites.

The find_file(), find_library(), find_path(),
find_package(), and find_program() commands have learned to
check the following variables to control the default behavior for groups of
search locations:

CMAKE_FIND_USE_PACKAGE_ROOT_PATH - Controls the default
behavior of searching the <PackageName>_ROOT variables.

CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH - Controls the default
behavior of searching the CMake-specific environment variables.

CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH - Controls the default
behavior of searching the standard system environment variables.

CMAKE_FIND_USE_CMAKE_PATH - Controls the default behavior of
searching the CMake-specific cache variables.

CMAKE_FIND_USE_CMAKE_SYSTEM_PATH - Controls the default
behavior of searching the platform-specific CMake variables.

The find_package() command has learned to check the
CMAKE_FIND_USE_PACKAGE_REGISTRY variable to control the default
behavior of searching the CMake user package registry and to check the
CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY variable to control
the default behavior of searching the CMake system package registry.

The message() command learned indentation control with the new
CMAKE_MESSAGE_INDENT variable.

The target_precompile_headers() command was added to specify
a list of headers to precompile for faster compilation times.

Variables¶

The CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS variable has been
introduced to optionally initialize the
CUDA_RESOLVE_DEVICE_SYMBOLS target property.

The CMAKE_ECLIPSE_RESOURCE_ENCODING variable was added to
specify the resource encoding for the the Eclipse CDT4 extra
generator.

The CMAKE_UNITY_BUILD variable was added to initialize the
UNITY_BUILD target property to tell generators to batch
include source files for faster compilation times.

Properties¶

The BUILD_RPATH and INSTALL_RPATH target properties
now support generator expressions.

The INSTALL_REMOVE_ENVIRONMENT_RPATH target property was
added to remove compiler-defined RPATH entries from a target.
This property is initialized by the
CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH variable.

The PRECOMPILE_HEADERS target property was added to specify
a list of headers to precompile for faster compilation times.
Set it using the target_precompile_headers() command.

The UNITY_BUILD target property was added to tell
generators to batch include source files for faster compilation
times.

The VS_CONFIGURATION_TYPE target property now supports
generator expressions.

The VS_DPI_AWARE target property was added to tell
Visual Studio Generators to set the EnableDpiAwareness
property in .vcxproj files.

The XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING target property was
added to tell the Xcode generator to set the value of the
Allow debugging when using document Versions Browser schema option.

Modules¶

The FindDoxygen module doxygen_add_docs() command
gained a new USE_STAMP_FILE option.  When this option present,
the custom target created by the command will only re-run Doxygen if
any of the source files have changed since the last successful run.

The FindGnuTLS module now provides an imported target.

The FindPackageHandleStandardArgs module
find_package_handle_standard_args() command gained
a new REASON_FAILURE_MESSAGE option to specify a message
giving the reason for the failure.

The FindPkgConfig module pkg_search_module() macro
now defines a <prefix>_MODULE_NAME result variable containing the
first matching module name.

The FindPython3 and FindPython modules gained
options to control which ABIs will be searched.

The FindPython3, FindPython2, and FindPython
modules now support direct specification of artifacts via cache entries.

Autogen¶

When using AUTOMOC, the new CMAKE_AUTOMOC_PATH_PREFIX
variable or AUTOMOC_PATH_PREFIX target property may be enabled
to generate the -p path prefix
option for moc.  This ensures that moc output files are identical
on different build setups (given, that the headers compiled by moc are
in an include directory).
Also it ensures that moc output files will compile correctly when the
source and/or build directory is a symbolic link.

CTest¶

ctest(1) now has the ability to schedule tests based on resource
requirements for each test. See Resource Allocation for
details.

A new test property, SKIP_REGULAR_EXPRESSION, has been added.
This property is similar to FAIL_REGULAR_EXPRESSION and
PASS_REGULAR_EXPRESSION, but with the same meaning as
SKIP_RETURN_CODE. This is useful, for example, in cases where
the user has no control over the return code of the test. For example, in
Catch2, the return value is the number of assertion failed, therefore it is
impossible to use it for SKIP_RETURN_CODE.

CPack¶

cpack(1) learned support for multiple configurations for -C
option.

The CPack DEB Generator is now able to format generic text
(usually used as the description for multiple CPack generators) according
to the Debian Policy Manual.  See the
CPACK_PACKAGE_DESCRIPTION_FILE and
CPACK_DEBIAN_<COMPONENT>_DESCRIPTION variables.

The CPack Archive Generator learned to generate .tar.zst
packages with Zstandard compression.

Deprecated and Removed Features¶

An explicit deprecation diagnostic was added for policy CMP0067
(CMP0066 and below were already deprecated).
The cmake-policies(7) manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.

The CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY variable has been
deprecated.  Use the CMAKE_FIND_USE_PACKAGE_REGISTRY variable
instead.

The GetPrerequisites module has been deprecated, as it has been
superseded by file(GET_RUNTIME_DEPENDENCIES).

The CPACK_INSTALL_SCRIPT variable has been deprecated in favor of the
new, more accurately named CPACK_INSTALL_SCRIPTS variable.

Other Changes¶

The cmake(1) -C <initial-cache> option now evaluates the
initial cache script with CMAKE_SOURCE_DIR and
CMAKE_BINARY_DIR set to the top-level source and build trees.

The cmake(1) -E remove_directory command-line tool,
when given the path to a symlink to a directory, now removes just
the symlink.  It no longer removes content of the linked directory.

The ctest(1)  --build-makeprogram command-line option now
specifies the make program used when configuring a project with the
Ninja generator or the Makefile Generators.

The ExternalProject module ExternalProject_Add() command
has been updated so that GIT_SUBMODULES "" initializes no submodules.
See policy CMP0097.

The FindGTest module has been updated to recognize
MSVC build trees generated by GTest 1.8.1.

The project() command no longer strips leading zeros in version
components.  See policy CMP0096.

The Qt Compressed Help file is now named CMake.qch, which no longer
contains the release version in the file name.  When CMake is upgraded
in-place, the name and location of this file will remain constant.
Tools such as IDEs, help viewers, etc. should now be able to refer to this
file at a fixed location that remains valid across CMake upgrades.

RPATH entries are properly escaped in the generated CMake scripts
used for installation.  See policy CMP0095.

When using CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS on Windows the
auto-generated exports are now updated only when the object files
providing the symbols are updated.

Updates¶

Changes made since CMake 3.16.0 include the following.

3.16.2¶

CMake 3.16.0 and 3.16.1 processed .hh files with AUTOMOC.
This was a behavior change from CMake 3.15 and below that can break
existing projects, so it has been reverted as of 3.16.2.

3.16.5¶

The FindPython, FindPython2, and FindPython3
modules no longer create cache entries for Python{,2,3}_LIBRARY_RELEASE
and Python{,2,3}_LIBRARY_DEBUG.  Those values are always computed from
other results and so should not be cached.  The entries were created by
CMake 3.16.0 through 3.16.4 but were always FORCE-set and could not
be meaningfully edited by users.

Additionally, the modules no longer expose their internal _Python*
cache entries publicly.  CMake 3.16.0 through 3.16.4 accidentally
made them visible as advanced cache entries.

3.16.7¶

Selection of the Objective C or C++ compiler now considers the
CC or CXX environment variable if the
OBJC or OBJCXX environment variable is not set.

The FindPkgConfig module now extracts include directories
prefixed with -isystem into the *_INCLUDE_DIRS variables and
INTERFACE_INCLUDE_DIRECTORIES target properties.
Previously they would be places in *_CFLAGS_OTHER variables and
INTERFACE_COMPILE_OPTIONS target properties.

3.16.9¶

The default value of CMAKE_AUTOMOC_PATH_PREFIX was changed to
OFF because this feature can break existing projects that have
identically named header files in different include directories.
This restores compatibility with behavior of CMake 3.15 and below.

Table of Contents

CMake 3.16 Release Notes

New Features

Languages

Compilers

Platforms

Command-Line

Commands

Variables

Properties

Modules

Autogen

CTest

CPack

Deprecated and Removed Features

Other Changes

Updates

3.16.2

3.16.5

3.16.7

3.16.9

Previous topic

CMake 3.17 Release Notes

Next topic

CMake 3.15 Release Notes

This Page

Show Source

Quick search

    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>

Navigation

          index

          next |

          previous |

    CMake »

    3.29.0-rc3 Documentation »

CMake Release Notes »

CMake 3.16 Release Notes

        © Copyright 2000-2024 Kitware, Inc. and Contributors.
      Created using Sphinx 6.2.1.