Uploaded Test files

This commit is contained in:
Batuhan Berk Başoğlu 2020-11-12 11:05:57 -05:00
parent f584ad9d97
commit 2e81cb7d99
16627 changed files with 2065359 additions and 102444 deletions

View file

@ -0,0 +1,473 @@
CMake 3.0 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 2.8.12 include the following.
Documentation Changes
=====================
* The CMake documentation has been converted to reStructuredText and
now transforms via Sphinx (`<http://sphinx-doc.org>`__) into man and
html pages. This allows the documentation to be properly indexed
and to contain cross-references.
Conversion from the old internal documentation format was done by
an automatic process so some documents may still contain artifacts.
They will be updated incrementally over time.
A basic reStructuredText processor has been implemented to support
``cmake --help-command`` and similar command-line options.
* New manuals were added:
- :manual:`cmake-buildsystem(7)`
- :manual:`cmake-commands(7)`, replacing ``cmakecommands(1)``
and ``cmakecompat(1)``
- :manual:`cmake-developer(7)`
- :manual:`cmake-generator-expressions(7)`
- :manual:`cmake-generators(7)`
- :manual:`cmake-language(7)`
- :manual:`cmake-modules(7)`, replacing ``cmakemodules(1)``
- :manual:`cmake-packages(7)`
- :manual:`cmake-policies(7)`, replacing ``cmakepolicies(1)``
- :manual:`cmake-properties(7)`, replacing ``cmakeprops(1)``
- :manual:`cmake-qt(7)`
- :manual:`cmake-toolchains(7)`
- :manual:`cmake-variables(7)`, replacing ``cmakevars(1)``
* Release notes for CMake 3.0.0 and above will now be included with
the html documentation.
New Features
============
Syntax
------
* The CMake language has been extended with
:ref:`Bracket Argument` and :ref:`Bracket Comment`
syntax inspired by Lua long brackets::
set(x [===[bracket argument]===] #[[bracket comment]])
Content between equal-length open- and close-brackets is taken
literally with no variable replacements.
.. warning::
This syntax change could not be made in a fully compatible
way. No policy is possible because syntax parsing occurs before
any chance to set a policy. Existing code using an unquoted
argument that starts with an open bracket will be interpreted
differently without any diagnostic. Fortunately the syntax is
obscure enough that this problem is unlikely in practice.
Generators
----------
* A new :generator:`CodeLite` extra generator is available
for use with the Makefile or Ninja generators.
* A new :generator:`Kate` extra generator is available
for use with the Makefile or Ninja generators.
* The :generator:`Ninja` generator learned to use ``ninja`` job pools
when specified by a new :prop_gbl:`JOB_POOLS` global property.
Commands
--------
* The :command:`add_library` command learned a new ``INTERFACE``
library type. Interface libraries have no build rules but may
have properties defining
:manual:`usage requirements <cmake-buildsystem(7)>`
and may be installed, exported, and imported. This is useful to
create header-only libraries that have concrete link dependencies
on other libraries.
* The :command:`export()` command learned a new ``EXPORT`` mode that
retrieves the list of targets to export from an export set configured
by the :command:`install(TARGETS)` command ``EXPORT`` option. This
makes it easy to export from the build tree the same targets that
are exported from the install tree.
* The :command:`export` command learned to work with multiple dependent
export sets, thus allowing multiple packages to be built and exported
from a single tree. The feature requires CMake to wait until the
generation step to write the output file. This means one should not
:command:`include` the generated targets file later during project
configuration because it will not be available.
Use :ref:`Alias Targets` instead. See policy :policy:`CMP0024`.
* The :command:`install(FILES)` command learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`
in the list of files.
* The :command:`project` command learned to set some version variables
to values specified by the new ``VERSION`` option or to empty strings.
See policy :policy:`CMP0048`.
* The :command:`string` command learned a new ``CONCAT`` mode.
It is particularly useful in combination with the new
:ref:`Bracket Argument` syntax.
* The :command:`unset` command learned a ``PARENT_SCOPE`` option
matching that of the :command:`set` command.
* The :command:`include_external_msproject` command learned
to handle non-C++ projects like ``.vbproj`` or ``.csproj``.
* The :command:`ctest_update` command learned to update work trees
managed by the Perforce (p4) version control tool.
* The :command:`message` command learned a ``DEPRECATION`` mode. Such
messages are not issued by default, but may be issued as a warning if
:variable:`CMAKE_WARN_DEPRECATED` is enabled, or as an error if
:variable:`CMAKE_ERROR_DEPRECATED` is enabled.
* The :command:`target_link_libraries` command now allows repeated use of
the ``LINK_PUBLIC`` and ``LINK_PRIVATE`` keywords.
Variables
---------
* Variable :variable:`CMAKE_FIND_NO_INSTALL_PREFIX` has been
introduced to tell CMake not to add the value of
:variable:`CMAKE_INSTALL_PREFIX` to the
:variable:`CMAKE_SYSTEM_PREFIX_PATH` variable by default.
This is useful when building a project that installs some
of its own dependencies to avoid finding files it is about
to replace.
* Variable :variable:`CMAKE_STAGING_PREFIX` was introduced for use
when cross-compiling to specify an installation prefix on the
host system that differs from a :variable:`CMAKE_INSTALL_PREFIX`
value meant for the target system.
* Variable :variable:`CMAKE_SYSROOT` was introduced to specify the
toolchain SDK installation prefix, typically for cross-compiling.
This is used to pass a ``--sysroot`` option to the compiler and
as a prefix searched by ``find_*`` commands.
* Variable :variable:`CMAKE_<LANG>_COMPILER_TARGET` was introduced
for use when cross-compiling to specify the target platform in the
:ref:`toolchain file <Cross Compiling Toolchain>` specified by the
:variable:`CMAKE_TOOLCHAIN_FILE` variable.
This is used to pass an option such as ``--target=<triple>`` to some
cross-compiling compiler drivers.
* Variable :variable:`CMAKE_MAP_IMPORTED_CONFIG_<CONFIG>` has been
introduced to optionally initialize the
:prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` target property.
Properties
----------
* The :prop_dir:`ADDITIONAL_MAKE_CLEAN_FILES` directory property
learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* A new directory property :prop_dir:`CMAKE_CONFIGURE_DEPENDS`
was introduced to allow projects to specify additional
files on which the configuration process depends. CMake will
re-run at build time when one of these files is modified.
Previously this was only possible to achieve by specifying
such files as the input to a :command:`configure_file` command.
* A new :ref:`Qt AUTORCC` feature replaces the need to
invoke ``qt4_add_resources()`` by allowing ``.qrc`` files to
be listed as target sources.
* A new :ref:`Qt AUTOUIC` feature replaces the need to
invoke ``qt4_wrap_ui()``.
* Test properties learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
This is useful to specify per-configuration values for test
properties like :prop_test:`REQUIRED_FILES` and
:prop_test:`WORKING_DIRECTORY`.
* A new :prop_test:`SKIP_RETURN_CODE` test property was introduced
to tell :manual:`ctest(1)` to treat a particular test return code as
if the test were not run. This is useful for test drivers to report
that certain test requirements were not available.
* New types of :ref:`Compatible Interface Properties` were introduced,
namely the :prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MAX` and
:prop_tgt:`COMPATIBLE_INTERFACE_NUMBER_MIN` for calculating numeric
maximum and minimum values respectively.
Modules
-------
* The :module:`CheckTypeSize` module ``check_type_size`` macro and
the :module:`CheckStructHasMember` module ``check_struct_has_member``
macro learned a new ``LANGUAGE`` option to optionally check C++ types.
* The :module:`ExternalData` module learned to work with no
URL templates if a local store is available.
* The :module:`ExternalProject` function ``ExternalProject_Add``
learned a new ``GIT_SUBMODULES`` option to specify a subset
of available submodules to checkout.
* A new :module:`FindBacktrace` module has been added to support
:command:`find_package(Backtrace)` calls.
* A new :module:`FindLua` module has been added to support
:command:`find_package(Lua)` calls.
* The :module:`FindBoost` module learned a new ``Boost_NAMESPACE``
option to change the ``boost`` prefix on library names.
* The :module:`FindBoost` module learned to control search
for libraries with the ``g`` tag (for MS debug runtime) with
a new ``Boost_USE_DEBUG_RUNTIME`` option. It is ``ON`` by
default to preserve existing behavior.
* The :module:`FindJava` and :module:`FindJNI` modules learned
to use a ``JAVA_HOME`` CMake variable or environment variable,
and then try ``/usr/libexec/java_home`` on OS X.
* The :module:`UseJava` module ``add_jar`` function learned a new
``MANIFEST`` option to pass the ``-m`` option to ``jar``.
* A new :module:`CMakeFindDependencyMacro` module was introduced with
a ``find_dependency`` macro to find transitive dependencies in
a :manual:`package configuration file <cmake-packages(7)>`. Such
dependencies are omitted by the listing of the :module:`FeatureSummary`
module.
* The :module:`FindQt4` module learned to create :ref:`Imported Targets`
for Qt executables. This helps disambiguate when using multiple
:manual:`Qt versions <cmake-qt(7)>` in the same buildsystem.
* The :module:`FindRuby` module learned to search for Ruby 2.0 and 2.1.
Generator Expressions
---------------------
* New ``$<PLATFORM_ID>`` and ``$<PLATFORM_ID:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>`
have been added.
* The ``$<CONFIG>``
:manual:`generator expression <cmake-generator-expressions(7)>` now has
a variant which takes no argument. This is equivalent to the
``$<CONFIGURATION>`` expression.
* New ``$<UPPER_CASE:...>`` and ``$<LOWER_CASE:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>`
generator expressions have been added.
* A new ``$<MAKE_C_IDENTIFIER:...>``
:manual:`generator expression <cmake-generator-expressions(7)>` has
been added.
Other
-----
* The :manual:`cmake(1)` ``-E`` option learned a new ``sleep`` command.
* The :manual:`ccmake(1)` dialog learned to honor the
:prop_cache:`STRINGS` cache entry property to cycle through
the enumerated list of possible values.
* The :manual:`cmake-gui(1)` dialog learned to remember window
settings between sessions.
* The :manual:`cmake-gui(1)` dialog learned to remember the type
of a cache entry for completion in the ``Add Entry`` dialog.
New Diagnostics
===============
* Directories named in the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`
target property of imported targets linked conditionally by a
:manual:`generator expression <cmake-generator-expressions(7)>`
were not checked for existence. Now they are checked.
See policy :policy:`CMP0027`.
* Build target names must now match a validity pattern and may no longer
conflict with CMake-defined targets. See policy :policy:`CMP0037`.
* Build targets that specify themselves as a link dependency were
silently accepted but are now diagnosed. See :policy:`CMP0038`.
* The :command:`target_link_libraries` command used to silently ignore
calls specifying as their first argument build targets created by
:command:`add_custom_target` but now diagnoses this mistake.
See policy :policy:`CMP0039`.
* The :command:`add_custom_command` command used to silently ignore
calls specifying the ``TARGET`` option with a non-existent target
but now diagnoses this mistake. See policy :policy:`CMP0040`.
* Relative paths in the :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`
target property used to be silently accepted if they contained a
:manual:`generator expression <cmake-generator-expressions(7)>`
but are now rejected. See policy :policy:`CMP0041`.
* The :command:`get_target_property` command learned to reject calls
specifying a non-existent target. See policy :policy:`CMP0045`.
* The :command:`add_dependencies` command learned to reject calls
specifying a dependency on a non-existent target.
See policy :policy:`CMP0046`.
* Link dependency analysis learned to assume names containing ``::``
refer to :ref:`Alias Targets` or :ref:`Imported Targets`. It will
now produce an error if such a linked target is missing. Previously
in this case CMake generated a link line that failed at build time.
See policy :policy:`CMP0028`.
* When the :command:`project` or :command:`enable_language` commands
initialize support for a language, it is now an error if the full
path to the compiler cannot be found and stored in the corresponding
:variable:`CMAKE_<LANG>_COMPILER` variable. This produces nicer error
messages up front and stops processing when no working compiler
is known to be available.
* Target sources specified with the :command:`add_library` or
:command:`add_executable` command learned to reject items which
require an undocumented extra layer of variable expansion.
See policy :policy:`CMP0049`.
* Use of :command:`add_custom_command` undocumented ``SOURCE``
signatures now results in an error. See policy :policy:`CMP0050`.
Deprecated and Removed Features
===============================
* Compatibility options supporting code written for CMake versions
prior to 2.4 have been removed.
* Several long-outdated commands that should no longer be called
have been disallowed in new code by policies:
- Policy :policy:`CMP0029` disallows :command:`subdir_depends`
- Policy :policy:`CMP0030` disallows :command:`use_mangled_mesa`
- Policy :policy:`CMP0031` disallows :command:`load_command`
- Policy :policy:`CMP0032` disallows :command:`output_required_files`
- Policy :policy:`CMP0033` disallows :command:`export_library_dependencies`
- Policy :policy:`CMP0034` disallows :command:`utility_source`
- Policy :policy:`CMP0035` disallows :command:`variable_requires`
- Policy :policy:`CMP0036` disallows :command:`build_name`
* The :manual:`cmake(1)` ``-i`` wizard mode has been removed.
Instead use an interactive dialog such as :manual:`ccmake(1)`
or use the ``-D`` option to set cache values from the command line.
* The builtin documentation formatters that supported command-line
options such as ``--help-man`` and ``--help-html`` have been removed
in favor of the above-mentioned new documentation system. These and
other command-line options that used to generate man- and html-
formatted pages no longer work. The :manual:`cmake(1)`
``--help-custom-modules`` option now produces a warning at runtime
and generates a minimal document that reports the limitation.
* The :prop_dir:`COMPILE_DEFINITIONS_<CONFIG>` directory properties and the
:prop_tgt:`COMPILE_DEFINITIONS_<CONFIG>` target properties have been
deprecated. Instead set the corresponding :prop_dir:`COMPILE_DEFINITIONS`
directory property or :prop_tgt:`COMPILE_DEFINITIONS` target property and
use :manual:`generator expressions <cmake-generator-expressions(7)>` like
``$<CONFIG:...>`` to specify per-configuration definitions.
See policy :policy:`CMP0043`.
* The :prop_tgt:`LOCATION` target property should no longer be read from
non-IMPORTED targets. It does not make sense in multi-configuration
generators since the build configuration is not known while configuring
the project. It has been superseded by the ``$<TARGET_FILE>`` generator
expression. See policy :policy:`CMP0026`.
* The :prop_tgt:`COMPILE_FLAGS` target property is now documented
as deprecated, though no warning is issued. Use the
:prop_tgt:`COMPILE_OPTIONS` target property or the
:command:`target_compile_options` command instead.
* The :module:`GenerateExportHeader` module ``add_compiler_export_flags``
function is now deprecated. It has been superseded by the
:prop_tgt:`<LANG>_VISIBILITY_PRESET` and
:prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties.
Other Changes
=============
* The version scheme was changed to use only two components for
the feature level instead of three. The third component will
now be used for bug-fix releases or the date of development versions.
See the :variable:`CMAKE_VERSION` variable documentation for details.
* The default install locations of CMake itself on Windows and
OS X no longer contain the CMake version number. This allows
for easy replacement without re-generating local build trees
manually.
* Generators for Visual Studio 10 (2010) and later were renamed to
include the product year like generators for older VS versions:
- ``Visual Studio 10`` -> :generator:`Visual Studio 10 2010`
- ``Visual Studio 11`` -> :generator:`Visual Studio 11 2012`
- ``Visual Studio 12`` -> :generator:`Visual Studio 12 2013`
This clarifies which generator goes with each Visual Studio
version. The old names are recognized for compatibility.
* The :variable:`CMAKE_<LANG>_COMPILER_ID` value for Apple-provided
Clang is now ``AppleClang``. It must be distinct from upstream
Clang because the version numbers differ.
See policy :policy:`CMP0025`.
* The :variable:`CMAKE_<LANG>_COMPILER_ID` value for ``qcc`` on QNX
is now ``QCC``. It must be distinct from ``GNU`` because the
command-line options differ. See policy :policy:`CMP0047`.
* On 64-bit OS X the :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` value
is now correctly detected as ``x86_64`` instead of ``i386``.
* On OS X, CMake learned to enable behavior specified by the
:prop_tgt:`MACOSX_RPATH` target property by default. This activates
use of ``@rpath`` for runtime shared library searches.
See policy :policy:`CMP0042`.
* The :command:`build_command` command now returns a :manual:`cmake(1)`
``--build`` command line instead of a direct invocation of the native
build tool. When using ``Visual Studio`` generators, CMake and CTest
no longer require :variable:`CMAKE_MAKE_PROGRAM` to be located up front.
Selection of the proper msbuild or devenv tool is now performed as
late as possible when the solution (``.sln``) file is available so
it can depend on project content.
* The :manual:`cmake(1)` ``--build`` command now shares its own stdout
and stderr pipes with the native build tool by default.
The ``--use-stderr`` option that once activated this is now ignored.
* The ``$<C_COMPILER_ID:...>`` and ``$<CXX_COMPILER_ID:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>`
used to perform case-insensitive comparison but have now been
corrected to perform case-sensitive comparison.
See policy :policy:`CMP0044`.
* The builtin ``edit_cache`` target will no longer select
:manual:`ccmake(1)` by default when no interactive terminal will
be available (e.g. with :generator:`Ninja` or an IDE generator).
Instead :manual:`cmake-gui(1)` will be preferred if available.
* The :module:`ExternalProject` download step learned to
re-attempt download in certain cases to be more robust to
temporary network failure.
* The :module:`FeatureSummary` no longer lists transitive
dependencies since they were not directly requested by the
current project.
* The ``cmake-mode.el`` major Emacs editing mode has been cleaned
up and enhanced in several ways.
* Include directories specified in the
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of :ref:`Imported Targets`
are treated as ``SYSTEM`` includes by default when handled as
:ref:`usage requirements <Include Directories and Usage Requirements>`.

View file

@ -0,0 +1,425 @@
CMake 3.1 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.0 include the following.
Documentation Changes
=====================
* A new :manual:`cmake-compile-features(7)` manual was added.
New Features
============
Generators
----------
* The :generator:`Visual Studio 14 2015` generator was added.
Windows Phone and Windows Store
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Generators for Visual Studio 11 (2012) and above learned to generate
projects for Windows Phone and Windows Store. One may set the
:variable:`CMAKE_SYSTEM_NAME` variable to ``WindowsPhone``
or ``WindowsStore`` on the :manual:`cmake(1)` command-line
or in a :variable:`CMAKE_TOOLCHAIN_FILE` to activate these platforms.
Also set :variable:`CMAKE_SYSTEM_VERSION` to ``8.0`` or ``8.1`` to
specify the version of Windows to be targeted.
NVIDIA Nsight Tegra
^^^^^^^^^^^^^^^^^^^
* Generators for Visual Studio 10 (2010) and above learned to generate
projects for NVIDIA Nsight Tegra Visual Studio Edition. One may set
the :variable:`CMAKE_SYSTEM_NAME` variable to ``Android`` on the
:manual:`cmake(1)` command-line or in a :variable:`CMAKE_TOOLCHAIN_FILE`
to activate this platform.
Syntax
------
* The :manual:`cmake-language(7)` syntax for :ref:`Variable References` and
:ref:`Escape Sequences` was simplified in order to allow a much faster
implementation. See policy :policy:`CMP0053`.
* The :command:`if` command no longer automatically dereferences
variables named in quoted or bracket arguments. See policy
:policy:`CMP0054`.
Commands
--------
* The :command:`add_custom_command` command learned to interpret
:manual:`cmake-generator-expressions(7)` in arguments to ``DEPENDS``.
* The :command:`export(PACKAGE)` command learned to check the
:variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable to skip
exporting the package.
* The :command:`file(STRINGS)` command gained a new ``ENCODING``
option to enable extraction of ``UTF-8`` strings.
* The :command:`find_package` command learned to check the
:variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` and
:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`
variables to skip searching the package registries.
* The :command:`get_property` command learned a new ``INSTALL`` scope
for properties.
* The :command:`install` command learned a ``MESSAGE_NEVER`` option
to avoid output during installation.
* The :command:`set_property` command learned a new ``INSTALL`` scope
for properties.
* The :command:`string` command learned a new ``GENEX_STRIP`` subcommand
which removes
:manual:`generator expression <cmake-generator-expressions(7)>`.
* The :command:`string` command learned a new ``UUID`` subcommand
to generate a univerally unique identifier.
* New :command:`target_compile_features` command allows populating the
:prop_tgt:`COMPILE_FEATURES` target property, just like any other
build variable.
* The :command:`target_sources` command was added to add to the
:prop_tgt:`SOURCES` target property.
Variables
---------
* The Visual Studio generators for versions 8 (2005) and above
learned to read the target platform name from a new
:variable:`CMAKE_GENERATOR_PLATFORM` variable when it is
not specified as part of the generator name. The platform
name may be specified on the :manual:`cmake(1)` command line
with the ``-A`` option, e.g. ``-G "Visual Studio 12 2013" -A x64``.
* The :variable:`CMAKE_GENERATOR_TOOLSET` variable may now be
initialized in a toolchain file specified by the
:variable:`CMAKE_TOOLCHAIN_FILE` variable. This is useful
when cross-compiling with the Xcode or Visual Studio
generators.
* The :variable:`CMAKE_INSTALL_MESSAGE` variable was introduced to
optionally reduce output installation.
Properties
----------
* New :prop_tgt:`CXX_STANDARD` and :prop_tgt:`CXX_EXTENSIONS` target
properties may specify values which CMake uses to compute required
compile options such as ``-std=c++11`` or ``-std=gnu++11``. The
:variable:`CMAKE_CXX_STANDARD` and :variable:`CMAKE_CXX_EXTENSIONS`
variables may be set to initialize the target properties.
* New :prop_tgt:`C_STANDARD` and :prop_tgt:`C_EXTENSIONS` target
properties may specify values which CMake uses to compute required
compile options such as ``-std=c11`` or ``-std=gnu11``. The
:variable:`CMAKE_C_STANDARD` and :variable:`CMAKE_C_EXTENSIONS`
variables may be set to initialize the target properties.
* New :prop_tgt:`COMPILE_FEATURES` target property may contain a list
of features required to compile a target. CMake uses this
information to ensure that the compiler in use is capable of building
the target, and to add any necessary compile flags to support language
features.
* New :prop_tgt:`COMPILE_PDB_NAME` and
:prop_tgt:`COMPILE_PDB_OUTPUT_DIRECTORY` target properties
were introduced to specify the MSVC compiler program database
file location (``cl /Fd``). This complements the existing
:prop_tgt:`PDB_NAME` and :prop_tgt:`PDB_OUTPUT_DIRECTORY`
target properties that specify the linker program database
file location (``link /pdb``).
* The :prop_tgt:`INTERFACE_LINK_LIBRARIES` target property now supports
a ``$<LINK_ONLY:...>``
:manual:`generator expression <cmake-generator-expressions(7)>`.
* A new :prop_tgt:`INTERFACE_SOURCES` target property was introduced. This is
consumed by dependent targets, which compile and link the listed sources.
* The :prop_tgt:`SOURCES` target property now contains
:manual:`generator expression <cmake-generator-expressions(7)>`
such as ``TARGET_OBJECTS`` when read at configure time, if
policy :policy:`CMP0051` is ``NEW``.
* The :prop_tgt:`SOURCES` target property now generally supports
:manual:`generator expression <cmake-generator-expressions(7)>`. The
generator expressions may be used in the :command:`add_library` and
:command:`add_executable` commands.
* It is now possible to write and append to the :prop_tgt:`SOURCES` target
property. The :variable:`CMAKE_DEBUG_TARGET_PROPERTIES` variable may be
used to trace the origin of sources.
* A :prop_sf:`VS_DEPLOYMENT_CONTENT` source file property was added
to tell the Visual Studio generators to mark content for deployment
in Windows Phone and Windows Store projects.
* A :prop_sf:`VS_DEPLOYMENT_LOCATION` source file property was added
to tell the Visual Studio generators the relative location of content
marked for deployment in Windows Phone and Windows Store projects.
* The :prop_tgt:`VS_WINRT_COMPONENT` target property was created to
tell Visual Studio generators to compile a shared library as a
Windows Runtime (WinRT) component.
* The :generator:`Xcode` generator learned to check source
file properties :prop_sf:`XCODE_EXPLICIT_FILE_TYPE` and
:prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE` for a custom Xcode
file reference type.
Modules
-------
* The :module:`BundleUtilities` module learned to resolve and replace
``@rpath`` placeholders on OS X to correctly bundle applications
using them.
* The :module:`CMakePackageConfigHelpers` module
:command:`configure_package_config_file` command learned a new
``INSTALL_PREFIX`` option to generate package configuration files
meant for a prefix other than :variable:`CMAKE_INSTALL_PREFIX`.
* The :module:`CheckFortranSourceCompiles` module was added to
provide a ``CHECK_Fortran_SOURCE_COMPILES`` macro.
* The :module:`ExternalData` module learned to tolerate a ``DATA{}``
reference to a missing source file with a warning instead of
rejecting it with an error. This helps developers write new
``DATA{}`` references to test reference outputs that have not
yet been created.
* The :module:`ExternalProject` module learned to support lzma-compressed
source tarballs with ``.7z``, ``.tar.xz``, and ``.txz`` extensions.
* The :module:`ExternalProject` module ``ExternalProject_Add`` command
learned a new ``BUILD_ALWAYS`` option to cause the external project
build step to run every time the host project is built.
* The :module:`ExternalProject` module ``ExternalProject_Add`` command
learned a new ``EXCLUDE_FROM_ALL`` option to cause the external
project target to have the :prop_tgt:`EXCLUDE_FROM_ALL` target
property set.
* The :module:`ExternalProject` module ``ExternalProject_Add_Step`` command
learned a new ``EXCLUDE_FROM_MAIN`` option to cause the step to not be
a direct dependency of the main external project target.
* The :module:`ExternalProject` module ``ExternalProject_Add`` command
learned a new ``DOWNLOAD_NO_PROGRESS`` option to disable progress
output while downloading the source tarball.
* The :module:`FeatureSummary` module ``feature_summary`` API
learned to accept multiple values for the ``WHAT`` option and
combine them appropriately.
* The :module:`FindCUDA` module learned to support ``fatbin`` and ``cubin``
modules.
* The :module:`FindGTest` module ``gtest_add_tests`` macro learned
a new ``AUTO`` option to automatically read the :prop_tgt:`SOURCES`
target property of the test executable and scan the source files
for tests to be added.
* The :module:`FindGLEW` module now provides imported targets.
* The :module:`FindGLUT` module now provides imported targets.
* The :module:`FindHg` module gained a new ``Hg_WC_INFO`` macro to
help run ``hg`` to extract information about a Mercurial work copy.
* The :module:`FindOpenCL` module was introduced.
* The :module:`FindOpenMP` module learned to support Fortran.
* The :module:`FindPkgConfig` module learned to use the ``PKG_CONFIG``
environment variable value as the ``pkg-config`` executable, if set.
* The :module:`FindXercesC` module was introduced.
* The :module:`FindZLIB` module now provides imported targets.
* The :module:`GenerateExportHeader` module ``generate_export_header``
function learned to allow use with :ref:`Object Libraries`.
* The :module:`InstallRequiredSystemLibraries` module gained a new
``CMAKE_INSTALL_OPENMP_LIBRARIES`` option to install MSVC OpenMP
runtime libraries.
* The :module:`UseSWIG` module learned to detect the module name
from ``.i`` source files if possible to avoid the need to set
the ``SWIG_MODULE_NAME`` source file property explicitly.
* The :module:`WriteCompilerDetectionHeader` module was added to allow
creation of a portable header file for compiler optional feature detection.
Generator Expressions
---------------------
* New ``COMPILE_FEATURES``
:manual:`generator expression <cmake-generator-expressions(7)>` allows
setting build properties based on available compiler features.
CTest
-----
* The :command:`ctest_coverage` command learned to read variable
``CTEST_COVERAGE_EXTRA_FLAGS`` to set ``CoverageExtraFlags``.
* The :command:`ctest_coverage` command learned to support
Intel coverage files with the ``codecov`` tool.
* The :command:`ctest_memcheck` command learned to support sanitizer
modes, including ``AddressSanitizer``, ``MemorySanitizer``,
``ThreadSanitizer``, and ``UndefinedBehaviorSanitizer``.
Options may be set using the new
:variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS` variable.
CPack
-----
* :manual:`cpack(1)` gained an ``IFW`` generator to package using
Qt Framework Installer tools. See the :cpack_gen:`CPack IFW Generator`.
* :manual:`cpack(1)` gained ``7Z`` and ``TXZ`` generators supporting
lzma-compressed archives.
* The :cpack_gen:`CPack DEB Generator` learned a new
:variable:`CPACK_DEBIAN_COMPRESSION_TYPE` variable to set the
tarball compression type.
* The :cpack_gen:`CPack WIX Generator` learned to support
a :prop_inst:`CPACK_WIX_ACL` installed file property to
specify an Access Control List.
Other
-----
* The :manual:`cmake(1)` ``-E`` option learned a new ``env`` command.
* The :manual:`cmake(1)` ``-E tar`` command learned to support
lzma-compressed files.
* :ref:`Object Libraries` may now have extra sources that do not
compile to object files so long as they would not affect linking
of a normal library (e.g. ``.dat`` is okay but not ``.def``).
* Visual Studio generators for VS 8 and later learned to support
the ``ASM_MASM`` language.
* The Visual Studio generators learned to treat ``.hlsl`` source
files as High Level Shading Language sources (using ``FXCompile``
in ``.vcxproj`` files). Source file properties
:prop_sf:`VS_SHADER_TYPE`, :prop_sf:`VS_SHADER_MODEL`, and
:prop_sf:`VS_SHADER_ENTRYPOINT` were added added to specify the
shader type, model, and entry point name.
New Diagnostics
===============
* Policy :policy:`CMP0052` introduced to control directories in the
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` of exported targets.
Deprecated and Removed Features
===============================
* In CMake 3.0 the :command:`target_link_libraries` command
accidentally began allowing unquoted arguments to use
:manual:`generator expressions <cmake-generator-expressions(7)>`
containing a (``;`` separated) list within them. For example::
set(libs B C)
target_link_libraries(A PUBLIC $<BUILD_INTERFACE:${libs}>)
This is equivalent to writing::
target_link_libraries(A PUBLIC $<BUILD_INTERFACE:B C>)
and was never intended to work. It did not work in CMake 2.8.12.
Such generator expressions should be in quoted arguments::
set(libs B C)
target_link_libraries(A PUBLIC "$<BUILD_INTERFACE:${libs}>")
CMake 3.1 again requires the quotes for this to work correctly.
* Prior to CMake 3.1 the Makefile generators did not escape ``#``
correctly inside make variable assignments used in generated
makefiles, causing them to be treated as comments. This made
code like::
add_compile_options(-Wno-#pragma-messages)
not work in Makefile generators, but work in other generators.
Now it is escaped correctly, making the behavior consistent
across generators. However, some projects may have tried to
workaround the original bug with code like::
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-\\#pragma-messages")
This added the needed escape for Makefile generators but also
caused other generators to pass ``-Wno-\#pragma-messages`` to
the shell, which would work only in POSIX shells.
Unfortunately the escaping fix could not be made in a compatible
way so this platform- and generator-specific workaround no
longer works. Project code may test the :variable:`CMAKE_VERSION`
variable value to make the workaround version-specific too.
* Callbacks established by the :command:`variable_watch` command will no
longer receive the ``ALLOWED_UNKNOWN_READ_ACCESS`` access type when
the undocumented ``CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS`` variable is
set. Uninitialized variable accesses will always be reported as
``UNKNOWN_READ_ACCESS``.
* The :module:`CMakeDetermineVSServicePack` module now warns that
it is deprecated and should not longer be used. Use the
:variable:`CMAKE_<LANG>_COMPILER_VERSION` variable instead.
* The :module:`FindITK` module has been removed altogether.
It was a thin-wrapper around ``find_package(ITK ... NO_MODULE)``.
This produces much clearer error messages when ITK is not found.
* The :module:`FindVTK` module has been removed altogether.
It was a thin-wrapper around ``find_package(VTK ... NO_MODULE)``.
This produces much clearer error messages when VTK is not found.
The module also provided compatibility support for finding VTK 4.0.
This capability has been dropped.
Other Changes
=============
* The :manual:`cmake-gui(1)` learned to capture output from child
processes started by the :command:`execute_process` command
and display it in the output window.
* The :manual:`cmake-language(7)` internal implementation of generator
expression and list expansion parsers have been optimized and shows
non-trivial speedup on large projects.
* The Makefile generators learned to use response files with GNU tools
on Windows to pass library directories and names to the linker.
* When generating linker command-lines, CMake now avoids repeating
items corresponding to SHARED library targets.
* Support for the Open Watcom compiler has been overhauled.
The :variable:`CMAKE_<LANG>_COMPILER_ID` is now ``OpenWatcom``,
and the :variable:`CMAKE_<LANG>_COMPILER_VERSION` now uses
the Open Watcom external version numbering. The external
version numbers are lower than the internal version number
by 11.
* The ``cmake-mode.el`` major Emacs editing mode no longer
treats ``_`` as part of words, making it more consistent
with other major modes.

View file

@ -0,0 +1,282 @@
CMake 3.10 Release Notes
************************
.. only:: html
.. contents::
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.
.. _`flang`: https://github.com/flang-compiler/flang
Generators
----------
* The :ref:`Makefile Generators` and the :generator:`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
:variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* The :generator:`CodeBlocks` extra generator learned to optionally exclude
files from outside the project root directory from the generated project.
See the :variable:`CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES` variable.
Commands
--------
* The :command:`cmake_host_system_information` command learned more keys
to get information about the processor capabilities and the host OS
version.
* The :command:`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 :command:`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 :command:`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 :command:`string` command learned a new ``PREPEND`` subcommand.
* The :command:`string(TIMESTAMP)` command now supports ``%A``
for full weekday name and ``%B`` for full month name.
Variables
---------
* A :variable:`CMAKE_DIRECTORY_LABELS` variable was added to specify
labels for all tests in a directory.
Properties
----------
* A :prop_tgt:`<LANG>_CPPCHECK` target property and supporting
:variable:`CMAKE_<LANG>_CPPCHECK` variable were introduced to tell
the :ref:`Makefile Generators` and the :generator:`Ninja` generator to
run ``cppcheck`` with the compiler for ``C`` and ``CXX`` languages.
* A :prop_dir:`LABELS` directory property was added to specify labels
for all targets and tests in a directory.
* A :prop_dir:`TEST_INCLUDE_FILES` directory property was added to
list any number of files to be included when running tests with
:manual:`ctest(1)`. This generalizes the :prop_dir:`TEST_INCLUDE_FILE`
property.
* The :prop_tgt:`VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>`
target property was added to support custom XML tags for reference
assemblies in C# targets.
* Source file properties :prop_sf:`VS_SHADER_OUTPUT_HEADER_FILE` and
:prop_sf:`VS_SHADER_VARIABLE_NAME` have been added to specify more
details of ``.hlsl`` sources with :ref:`Visual Studio Generators`.
Modules
-------
* The :module:`FindCurses` module gained a ``CURSES_NEED_WIDE`` option
to request the wide-character variant.
* The :module:`FindEXPAT` module now provides imported targets.
* The :module:`FindFreetype` module now provides imported targets.
* :module:`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 :module:`FindOpenACC` module was added to detect compiler support
for OpenACC. Currently only supports PGI, GNU and Cray compilers.
* The :module:`FindOpenGL` module gained support for GLVND on Linux.
* The :module:`FindOpenMP` module gained support for
language-specific components.
* A :module:`FindPatch` module was added to find the ``patch``
command-line executable.
* The :module:`FindProtobuf` module :command:`protobuf_generate_cpp` command
gained a ``DESCRIPTORS`` option to generate descriptor files.
* The :module:`GoogleTest` module gained a new command
: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 :ref:`Release Notes 3.10.3`).
* The :module:`InstallRequiredSystemLibraries` module gained support
for installing Intel compiler runtimes.
Autogen
-------
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` with a
multi configuration generator (e.g. :generator:`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 :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`,
source files that are :prop_sf:`GENERATED` will be processed as well.
They were ignored by :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`
in earlier releases.
See policy :policy:`CMP0071`.
* When using :prop_tgt:`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 :variable:`CMAKE_AUTOMOC_MACRO_NAMES`
variable and :prop_tgt:`AUTOMOC_MACRO_NAMES` target property may be set
to register additional strings (macro names) to search for.
* When using :prop_tgt:`AUTOMOC`, the new
:variable:`CMAKE_AUTOMOC_COMPILER_PREDEFINES` variable and
:prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` target property specify whether
to enable or disable the generation of the compiler pre definitions file
``moc_predefs.h``.
CTest
-----
* A :variable:`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 :ref:`Dashboard Client` mode (e.g. ``ctest -S``)
set it in the ``CTestConfig.cmake`` config file.
CPack
-----
* A :cpack_gen:`CPack FreeBSD Generator` was added for FreeBSD ``pkg(8)``.
* The :cpack_gen:`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_gen:`CPack DEB Generator` learned to set package release
version in ``Version`` info property.
See the :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` variable.
* The :cpack_gen:`CPack DEB Generator` learned more strict package
version checking that complies with Debian rules.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands gained a new
``REPLACES`` and ``CHECKABLE`` options.
* The :cpack_gen:`CPack IFW Generator` gained new
:variable:`CPACK_IFW_PACKAGE_FILE_EXTENSION` variable to customize
target binary format.
* The :cpack_gen:`CPack IFW Generator` gained new
:variable:`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_gen:`CPack RPM Generator` and :cpack_gen:`CPack DEB Generator`
learned to set the package epoch version.
See :variable:`CPACK_RPM_PACKAGE_EPOCH` and
:variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables.
Other
-----
* The :manual:`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.
.. _`CMake Issue 17137`: https://gitlab.kitware.com/cmake/cmake/-/issues/17137
Other Changes
=============
* On FreeBSD the C++ compiler named ``c++`` is now the preferred default.
* The :command:`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 :policy:`CMP0070`.
* The :command:`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 :manual:`cmake-server(7)` ``codemodel`` response ``crossReferences``
field added by 3.10.0 has been dropped due to excessive memory usage.
Another approach will be needed to provide backtrace information.
.. _`Release Notes 3.10.3`:
3.10.3
------
* CMake 3.10.1 added a ``TIMEOUT`` option to :command:`gtest_discover_tests`
from the :module:`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 :command:`gtest_discover_tests` command's
``TIMEOUT`` keyword in 3.10.1 and 3.10.2 has not been preserved.

View file

@ -0,0 +1,307 @@
CMake 3.11 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.10 include the following.
New Features
============
Platforms
---------
* TI C/C++ compilers are now supported by the :generator:`Ninja` generator.
Generators
----------
* The :generator:`CodeBlocks` extra generator learned to check a
:variable:`CMAKE_CODEBLOCKS_COMPILER_ID` variable for a custom
compiler identification value to place in the project file.
* The :ref:`Makefile Generators` and the :generator:`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 :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* :ref:`Visual Studio Generators` learned to support the ``COMPILE_LANGUAGE``
:manual:`generator expression <cmake-generator-expressions(7)>` in
target-wide :prop_tgt:`COMPILE_DEFINITIONS`,
:prop_tgt:`INCLUDE_DIRECTORIES`, :prop_tgt:`COMPILE_OPTIONS`, and
:command:`file(GENERATE)`. See generator expression documentation
for caveats.
* The :generator:`Xcode` generator learned to support the ``COMPILE_LANGUAGE``
:manual:`generator expression <cmake-generator-expressions(7)>` in
target-wide :prop_tgt:`COMPILE_DEFINITIONS` and
:prop_tgt:`INCLUDE_DIRECTORIES`. It previously supported only
:prop_tgt:`COMPILE_OPTIONS` and :command:`file(GENERATE)`.
See generator expression documentation for caveats.
Commands
--------
* :command:`add_library` and :command:`add_executable` commands can now be
called without any sources and will not complain as long as sources are
added later via the :command:`target_sources` command.
* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands
gained ``NETRC`` and ``NETRC_FILE`` options to specify use of a
``.netrc`` file.
* The :command:`target_compile_definitions` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property on
:ref:`Imported Targets`.
* The :command:`target_compile_features` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_FEATURES` property on :ref:`Imported Targets`.
* The :command:`target_compile_options` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property on :ref:`Imported Targets`.
* The :command:`target_include_directories` command learned to set the
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` property on
:ref:`Imported Targets`.
* The :command:`target_sources` command learned to set the
:prop_tgt:`INTERFACE_SOURCES` property on :ref:`Imported Targets`.
* The :command:`target_link_libraries` command learned to set the
:prop_tgt:`INTERFACE_LINK_LIBRARIES` property on :ref:`Imported Targets`.
Variables
---------
* A :variable:`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
:generator:`Visual Studio 15 2017` generator to hold the
selected instance of Visual Studio persistently.
* A :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable was added
to enable setting of default permissions for directories created implicitly
during installation of files by :command:`install` and
:command:`file(INSTALL)`, e.g. during ``make install``.
* A :variable:`CMAKE_JOB_POOLS` variable was added specify a value to use for
the :prop_gbl:`JOB_POOLS` property. This enables control over build
parallelism with command line configuration parameters when using the Ninja
generator.
* The :variable:`CMAKE_NETRC` and :variable:`CMAKE_NETRC_FILE` variables
were added to specify use of a ``.netrc`` file by the
:command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands and
the :module:`ExternalProject` module.
* A :variable:`CMAKE_CUDA_SEPARABLE_COMPILATION` variable was added to
initialize the :prop_tgt:`CUDA_SEPARABLE_COMPILATION` target property
on targets when they are created.
Properties
----------
* The :prop_sf:`COMPILE_DEFINITIONS` source file property learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* A :prop_sf:`COMPILE_OPTIONS` source file property was added to manage list
of options to pass to the compiler.
* An :prop_tgt:`IMPORTED_GLOBAL` target property was added to indicate
whether an :ref:`IMPORTED target <Imported Targets>` is globally visible.
It is automatically set to a true value for targets created with the
``GLOBAL`` option to :command:`add_library` or :command:`add_executable`.
Additionally, project code may now *promote* a local imported target
to be globally visible by setting this property to ``TRUE``.
* An :prop_sf:`INCLUDE_DIRECTORIES` source file property was added to specify
list of preprocessor include file search directories.
* Source file properties :prop_sf:`VS_SHADER_DISABLE_OPTIMIZATIONS` and
:prop_sf:`VS_SHADER_ENABLE_DEBUG` have been added to specify more
details of ``.hlsl`` sources with :ref:`Visual Studio Generators`.
Modules
-------
* The :module:`CheckIncludeFiles` module :command:`CHECK_INCLUDE_FILES`
command gained a ``LANGUAGE`` option to specify whether to check using the
``C`` or ``CXX`` compiler.
* The :module:`CMakePackageConfigHelpers` module
:command:`write_basic_package_version_file` command learned a new
``SameMinorVersion`` mode for the ``COMPATIBILITY`` argument.
* The :module:`ExternalProject` module learned to substitute ``<DOWNLOAD_DIR>``
in comments, commands, working directory and byproducts.
* The :module:`ExternalProject` module gained ``NETRC`` and ``NETRC_FILE``
options to specify use of a ``.netrc`` file.
* A new :module:`FetchContent` module was added which supports populating
content at configure time using any of the download/update methods
supported by :command:`ExternalProject_Add`. This allows the content
to be used immediately during the configure stage, such as with
:command:`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 :module:`FindBLAS` and :module:`FindLAPACK` modules learned to support
`FLAME`_ ``blis`` and ``libflame``.
* The :module:`FindDoxygen` module :command:`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 :module:`FindIconv` module was added to locate iconv support.
* The :module:`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 :module:`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`_.
.. _`FLAME`: https://github.com/flame
.. _`JEP 313`: http://openjdk.java.net/jeps/313
Autogen
-------
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`, CMake now starts
multiple parallel ``moc`` or ``uic`` processes to reduce the build time.
A new :variable:`CMAKE_AUTOGEN_PARALLEL` variable and
:prop_tgt:`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 :command:`ctest_start` command no longer sets
:variable:`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 :variable:`CTEST_RUN_CURRENT_SCRIPT` to 0 at the
global scope still prevents the script from being re-run at the end.
CPack
-----
* :manual:`cpack(1)` gained ``--trace`` and ``--trace-expand`` options.
* The :cpack_gen:`CPack IFW Generator` gained new
:variable:`CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR` variable to control
if the target directory should not be deleted when uninstalling.
* The :cpack_gen:`CPack RPM Generator` learned to enable enforcing of execute
privileges on programs and shared libraries.
See :variable:`CPACK_RPM_INSTALL_WITH_EXEC` variable.
* A :variable:`CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable was added
which serves the same purpose during packaging (e.g. ``make package``) as the
:variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable serves during
installation (e.g. ``make install``).
Other
-----
* :ref:`Alias Targets` may now alias :ref:`Imported Targets` that are
created with the ``GLOBAL`` option to :command:`add_library`.
* :ref:`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 :manual:`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 :manual:`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 :policy:`CMP0037` no longer reserves target names associated
with optional features, such as ``test`` and ``package``, unless
the corresponding feature is enabled.
* The :module:`FindOpenGL` module now prefers GLVND libraries if available.
See policy :policy:`CMP0072`.
* The minimum deployment target set in the
:variable:`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 :variable:`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 :generator:`Xcode` generator behavior of generating one project
file per :command:`project()` command may now be controlled with the
:variable:`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 :module:`CheckIncludeFile` module ``check_include_file`` macro,
:module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro,
and :module:`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 :command:`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 :module:`FindQt4` module ``qt4_wrap_cpp``, ``qt4_wrap_ui`` and
``qt4_add_resources`` macros now set :prop_sf:`SKIP_AUTOMOC` and
:prop_sf:`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 :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.

View file

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

View file

@ -0,0 +1,289 @@
CMake 3.13 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.12 include the following.
New Features
============
Generators
----------
* The :ref:`Visual Studio Generators` for VS 2010 and above learned to
support the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property
and supporting :module:`CheckIPOSupported` module.
* The :generator:`Xcode` generator learned to configure more Xcode Scheme
fields. See the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable.
* The :generator:`Green Hills MULTI` generator has been updated:
- Added support for architecture selection through
:variable:`CMAKE_GENERATOR_PLATFORM`:
e.g. ``arm``, ``ppc``, and ``86``.
- Added support for toolset selection through
:variable:`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 :manual:`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 :manual:`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 :manual:`cmake(1)` ``-E create_symlink`` command can now be used
on Windows.
Commands
--------
* The :command:`add_custom_command` and :command:`add_custom_target` commands
learned to support generator expressions in ``WORKING_DIRECTORY`` options.
* The :command:`add_link_options` command was created to add link
options in the current directory.
* The :command:`install(TARGETS)` command learned to install targets
created outside the current directory.
* The :command:`link_directories` command gained options to control
insertion position.
* The :command:`list(SORT)` command gained options to control the
comparison operation used to order the entries.
* The :command:`math` command gained options for hexadecimal.
* The :command:`target_link_directories` command was created to
specify link directories for targets and their dependents.
* The :command:`target_link_options` command was created to
specify link options for targets and their dependents.
* The :command:`target_link_libraries` command may now be called
to modify targets created outside the current directory.
See policy :policy:`CMP0079`.
Variables
---------
* A :variable:`CMAKE_AUTOGEN_VERBOSE` variable was added to optionally
increase the verbosity of :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC`
and :prop_tgt:`AUTORCC` from within CMake project code.
* A :variable:`CMAKE_VS_GLOBALS` variable was added to initialize
:prop_tgt:`VS_GLOBAL_<variable>` target properties on targets as
they are created.
Properties
----------
* The :prop_tgt:`DEPLOYMENT_ADDITIONAL_FILES` target property was
added to tell the :generator:`Visual Studio 9 2008` generator
to specify additional files for deployment to WinCE devices
for remote debugging.
* The :prop_tgt:`INTERFACE_LINK_DEPENDS` target property was created
to specify transitive link dependencies on files.
* The :prop_tgt:`LINK_DEPENDS` target property learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* :prop_tgt:`LINK_DIRECTORIES` and :prop_tgt:`INTERFACE_LINK_DIRECTORIES`
target properties were added to collect link directories for a target
and its dependents. Use the :command:`target_link_directories` command
to set them.
* :prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
properties were added to collect link options for a target and its
dependents. Use the :command:`target_link_options` command to set them.
* A :prop_dir:`LINK_OPTIONS` directory property was added to collect
link options for targets created under the current directory.
Use the :command:`add_link_options` command to set it.
* A :prop_tgt:`STATIC_LIBRARY_OPTIONS` target property was created
to specify archiver options to use when creating static libraries.
* A :prop_tgt:`VS_DEBUGGER_COMMAND_ARGUMENTS` target property was created to
set the debugging command line arguments with
:ref:`Visual Studio Generators` for VS 2010 and above.
* A :prop_tgt:`VS_DEBUGGER_ENVIRONMENT` target property was created to
set the debugging environment with
:ref:`Visual Studio Generators` for VS 2010 and above.
* The :prop_tgt:`VS_DEBUGGER_COMMAND` and
:prop_tgt:`VS_DEBUGGER_WORKING_DIRECTORY` target properties
now support generator expressions.
Modules
-------
* The :module:`FindBoost` module gained a ``Boost_ARCHITECTURE`` option
to specify a Boost architecture-specific library filename fragment.
* The :module:`FindCURL` module learned to find debug and release variants
separately.
* The :module:`FindMatlab` module gained new components ``ENGINE_LIBRARY`` and
``DATAARRAY_LIBRARY`` to request finding the Matlab C++ Engine and DataArray
libraries respectively.
* The :module:`FindMatlab` module now explicitly exports mexFunction in Visual
Studio.
* The :module:`FindMatlab` module gained a new ``MCC_COMPILER``
component to request finding the Matlab Compiler add-on.
* The :module:`FindPkgConfig` module gained an option to create imported
targets in global scope.
* The :module:`FindPkgConfig` module gained support for ``<`` and ``>``
operators for version checks in addition to the already supported
operators ``>=``, ``<=``, and ``=``.
* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
gain capability to control order of resource lookup on macOS (Framework) and
Windows (Registry).
* The :module:`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 :module:`UseSWIG` module learned to manage target property
:prop_tgt:`INCLUDE_DIRECTORIES` for ``SWIG`` compilation.
CTest
-----
* :manual:`ctest(1)` gained a ``--progress`` option to enable a live
test progress summary when output goes to a terminal.
CPack
-----
* The :cpack_gen:`CPack DEB Generator` learned to split debug symbols into
a corresponding .ddeb package when ``CPACK_DEBIAN_DEBUGINFO_PACKAGE`` is
set.
* The :cpack_gen:`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_gen:`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 :manual:`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 :command:`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 :policy:`CMP0077`.
* The :ref:`Makefile Generators` learned to remove custom command and
custom target byproducts during ``make clean``.
* The :command:`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
:policy:`CMP0076` policy was added to provide backward compatibility with
the old behavior where required.
* The :module:`BundleUtilities` module may no longer be included at configure
time. This was always a bug anyway. See policy :policy:`CMP0080`.
* The :module:`UseSWIG` module has changed strategy for target naming.
See policy :policy:`CMP0078`.
* The :prop_tgt:`LINK_DIRECTORIES` target property now expects absolute paths.
See policy :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 :prop_tgt:`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 :generator:`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 :command:`target_link_libraries`
to add ``PRIVATE`` dependencies to a static library created in another
directory (under policy :policy:`CMP0079` ``NEW`` behavior) would
incorrectly propagate usage requirements of those dependencies to
dependents that link the static library. This has been fixed.

View file

@ -0,0 +1,438 @@
CMake 3.14 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.13 include the following.
New Features
============
Generators
----------
* The :generator:`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 :variable:`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 :generator:`Green Hills MULTI` generator has been updated:
* Now supports :ref:`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 :command:`project` command. The top-level project file
``default.gpj`` is no longer created.
* Now honors target renaming and destination output control properties
such as :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` and :prop_tgt:`OUTPUT_NAME`.
This also fixes support for installation rules generated by
:command:`install`.
* Now honors source file properties :prop_sf:`INCLUDE_DIRECTORIES`,
:prop_sf:`COMPILE_DEFINITIONS`, and :prop_sf:`COMPILE_OPTIONS`.
* Now supports Dynamic Download Integrity Applications which did not include
Integrate Files via :prop_tgt:`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 :prop_tgt:`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 :variable:`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 :manual:`cmake-file-api(7)` manual.
This is intended to replace the :manual:`cmake-server(7)` mode for IDEs.
Platforms
---------
* CMake now supports :ref:`Cross Compiling for iOS, tvOS, or watchOS`
using simple toolchain files.
Command-Line
------------
* The :manual:`cmake(1)` :ref:`Build Tool Mode <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 :manual:`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 :manual:`cmake-gui(1)` dialog gained new ``-S`` and ``-B`` arguments to
explicitly specify source and build directories.
Commands
--------
* The :command:`file` command learned a new sub-command, ``CREATE_LINK``,
which can be used to create hard or symbolic links.
* The :command:`file` command learned a new sub-command, ``READ_SYMLINK``,
which can be used to determine the path that a symlink points to.
* The :command:`file` command gained a ``SIZE`` mode to get the size
of a file on disk.
* The :command:`find_package` command learned to optionally resolve
symbolic links in the paths to package configuration files.
See the :variable:`CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS` variable.
* The :command:`get_filename_component` command gained new
``LAST_EXT`` and ``NAME_WLE`` variants to work with the
extension after the last ``.`` in the name.
* The :command:`if` command gained support for checking if cache variables
are defined with the ``DEFINED CACHE{VAR}`` syntax.
* The :command:`install(CODE)` and :command:`install(SCRIPT)` commands
learned to support generator expressions. See policy :policy:`CMP0087`.
* The :command:`install(TARGETS)` command learned how to install to an
appropriate default directory for a given target type, based on
variables from the :module:`GNUInstallDirs` module and built-in defaults,
in lieu of a ``DESTINATION`` argument.
* The :command:`install(FILES)` and :command:`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
:module:`GNUInstallDirs` and built-in defaults, in lieu of a
``DESTINATION`` argument.
* The :command:`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 :command:`list` operation ``REMOVE_AT`` now indicates that the given
indices are invalid for a non-existent variable or empty list.
* The :command:`try_compile` and :command:`try_run` commands gained a new
``LINK_OPTIONS`` option.
Variables
---------
* A :variable:`CMAKE_BUILD_RPATH_USE_ORIGIN` variable and corresponding
:prop_tgt:`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 :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable was added for
:ref:`Visual Studio Generators` to report their default platform used
when :variable:`CMAKE_GENERATOR_PLATFORM` is not set explicitly.
Properties
----------
* A :prop_gbl:`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 :prop_tgt:`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 :prop_tgt:`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 :prop_tgt:`EXCLUDE_FROM_ALL` property is set to ``OFF``, even if its
containing directory is marked as :prop_dir:`EXCLUDE_FROM_ALL`.
* :prop_tgt:`INTERFACE_POSITION_INDEPENDENT_CODE` target property gains the
support of :manual:`generator expressions <cmake-generator-expressions(7)>`.
Modules
-------
* The family of modules to check capabilities (like
:module:`CheckCSourceCompiles`) gain capability to manage ``LINK_OPTIONS``.
* A :module:`CheckFortranSourceRuns` module was added to provide a
:command:`check_fortran_source_runs` command to check if a Fortran
source snippet compiles and runs.
* The :module:`CMakePackageConfigHelpers` module's
:command:`write_basic_package_version_file` command gained a new
``ARCH_INDEPENDENT`` option for supporting architecture-independent
packages.
* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
gained ``LOG_DIR`` and ``LOG_MERGED_STDOUTERR`` options to control logging.
* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
gained ``LOG_PATCH`` to optionally log the patch step.
* The :module:`ExternalProject` module :command:`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 :module:`FetchContent` module gained a new
:command:`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 :module:`FindBISON` module's ``BISON_TARGET`` command now runs ``bison``
with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
See policy :policy:`CMP0088`.
* The :module:`FindCURL` module gained support for requesting
protocols as package components.
* The :module:`FindFontconfig` module was added to find `fontconfig`_.
* The :module:`FindGDAL` module now provides imported targets.
* The :module:`FindGIF` module now provides imported targets.
* The :module:`FindGit` module now provides an imported target for the
Git executable.
* The :module:`FindIce` module learned to find ``slice2confluence``
and ``slice2matlab``.
* The :module:`FindLibinput` module was added to find `libinput`_.
* The :module:`FindLibLZMA` module now provides imported targets.
* The :module:`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 :module:`FindPostgreSQL` module now provides imported targets.
* The :module:`FindPython`, :module:`FindPython2`, and :module:`FindPython3`
modules gained support for ``NumPy`` component.
* The :module:`FindPython2`, :module:`FindPython3`, and :module:`FindPython`
modules now support running in script mode by skipping the creation of
imported targets and helper functions.
* The :module:`FindSQLite3` module was added to find the SQLite v3.x library.
* The :module:`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 :module:`FindX11` now provides ``X11_Xext_INCLUDE_PATH``.
* The :module:`FindX11` now provides imported targets.
* The :module:`UseSWIG` module learned to pass ``-module <module_name>`` to
the ``SWIG`` compiler if the file property ``SWIG_MODULE_NAME`` is defined.
See policy :policy:`CMP0086`.
* The :module:`UseSWIG` module gained an option to specify
``SWIG`` source file extensions.
.. _`fontconfig`: https://www.freedesktop.org/wiki/Software/fontconfig/
.. _`libinput`: https://www.freedesktop.org/wiki/Software/libinput/
Generator Expressions
---------------------
* The ``$<Fortran_COMPILER_ID:...>`` and ``$<Fortran_COMPILER_VERSION:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>` were added.
* The ``$<IN_LIST:...>`` generator expression now correctly handles an
empty argument. See :policy:`CMP0085` for details.
Autogen
-------
* The :prop_tgt:`AUTOMOC_EXECUTABLE`, :prop_tgt:`AUTORCC_EXECUTABLE`, and
:prop_tgt:`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 :variable:`CMAKE_GLOBAL_AUTOGEN_TARGET`,
:variable:`CMAKE_GLOBAL_AUTOGEN_TARGET_NAME`,
:variable:`CMAKE_GLOBAL_AUTORCC_TARGET` and
:variable:`CMAKE_GLOBAL_AUTORCC_TARGET_NAME` control the generation
of global ``autogen`` and ``autorcc`` targets.
* A new :variable:`CMAKE_AUTOGEN_ORIGIN_DEPENDS` variable and
:prop_tgt:`AUTOGEN_ORIGIN_DEPENDS` target property may be set to enable or
disable forwarding of the origin target dependencies to the corresponding
``_autogen`` target.
CTest
-----
* :manual:`ctest(1)` gained a ``--show-only=json-v1`` option to show the
list of tests in a machine-readable JSON format.
See the :ref:`Show as JSON Object Model` section of the manual.
* The :command:`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 :manual:`ctest(1)`,
the :variable:`CTEST_SUBMIT_URL` variable, and the ``SUBMIT_URL``
argument of the :command:`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 :manual:`cmake-policies(7)` manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.
* The :generator:`Xcode` generator deprecated support for Xcode
versions prior to Xcode 5. Support for those will be dropped in a
future version of CMake.
* The :module:`FindQt` module is no longer used by the :command:`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 :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 :command:`add_subdirectory` now interleave with those in
the calling directory. See policy :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
:variable:`CMAKE_MAXIMUM_RECURSION_DEPTH`.
* When using cppcheck via the :variable:`CMAKE_<LANG>_CPPCHECK` variable
or :prop_tgt:`<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 :prop_tgt:`POSITION_INDEPENDENT_CODE` is set. The project is
responsible for using the :module:`CheckPIESupported` module to check for
``PIE`` support to ensure that the :prop_tgt:`POSITION_INDEPENDENT_CODE`
target property will be honored at link time for executables. This behavior
is controlled by policy :policy:`CMP0083`.
* :ref:`Visual Studio Generators` for VS 2010 and above learned
to support the ``VS_DEBUGGER_*`` properties on targets created
via :command:`add_custom_target`.
* The :module:`CPack` module no longer defaults to the ``paxr`` value in the
:variable:`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
:command:`install(TARGETS)` command has its :prop_tgt:`EXCLUDE_FROM_ALL`
property set to true.
Updates
=======
Changes made since CMake 3.14.0 include the following.
3.14.1
------
* The :module:`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 :variable:`CMAKE_VS_PLATFORM_NAME_DEFAULT` variable was added
to help toolchain files work with the :generator:`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 :command:`target_link_libraries`
to add ``PRIVATE`` dependencies to a static library created in another
directory (under policy :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 :command:`include_directories` and
:command:`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 :module:`FindBISON` module
policy :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 :prop_dir:`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.

View file

@ -0,0 +1,396 @@
CMake 3.15 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.14 include the following.
New Features
============
Generators
----------
* The :generator:`Xcode` generator now supports per-target schemes.
See the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable and
:prop_tgt:`XCODE_GENERATE_SCHEME` target property.
* The :generator:`Green Hills MULTI` generator has been updated:
* It now supports the :command:`add_custom_command` and
:command:`add_custom_target` commands.
* It is now available on Linux.
Languages
---------
* Preliminary support for the ``Swift`` language was added to the
:generator:`Ninja` generator:
* Use the :envvar:`SWIFTC` environment variable to specify a compiler.
* The :prop_tgt:`Swift_DEPENDENCIES_FILE` target property and
:prop_sf:`Swift_DEPENDENCIES_FILE` source file property were added
to customize dependency files.
* The :prop_tgt:`Swift_MODULE_NAME` target property was added to
customize the Swift module name.
* The :prop_sf:`Swift_DIAGNOSTICS_FILE` source property was added to
indicate where to write the serialised 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 :envvar:`CMAKE_GENERATOR` environment variable was added
to specify a default generator to use when :manual:`cmake(1)` is
run without a ``-G`` option. Additionally, environment variables
:envvar:`CMAKE_GENERATOR_PLATFORM`, :envvar:`CMAKE_GENERATOR_TOOLSET`,
and :envvar:`CMAKE_GENERATOR_INSTANCE` were created to configure
the generator.
* The :manual:`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 :manual:`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 :manual:`cmake(1)` command learned a new CLI option ``--loglevel``.
* The :manual:`cmake(1)` ``-E remove_directory`` command-line tool learned
to support removing multiple directories.
* The :manual:`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 :command:`add_custom_command` and :command:`add_custom_target` commands
gained a new ``JOB_POOL`` option that works with the :generator:`Ninja`
generator to set the pool variable on the build statement.
* The :command:`add_library` command ``ALIAS`` option learned to support
import libraries of the ``UNKNOWN`` type.
* The :command:`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 :command:`execute_process` command gained a ``COMMAND_ECHO`` option
and supporting :variable:`CMAKE_EXECUTE_PROCESS_COMMAND_ECHO` variable
to enable echoing of the command-line string before execution.
* The :command:`file(INSTALL)` command learned a new argument,
``FOLLOW_SYMLINK_CHAIN``, which can be used to recursively resolve and
install symlinks.
* :command:`list` learned new sub-commands:
``PREPEND``, ``POP_FRONT`` and ``POP_BACK``.
* The :command:`message` command learned new types:
``NOTICE``, ``VERBOSE``, ``DEBUG`` and ``TRACE``.
* The :command:`string` learned a new sub-command ``REPEAT``.
Variables
---------
* The :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable and corresponding
:prop_tgt:`CROSSCOMPILING_EMULATOR` target property learned to support
arguments to the emulator.
* The :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` variable was added to tell
:command:`find_package` calls to look for a package configuration
file first even if a find module is available.
* The :variable:`CMAKE_FRAMEWORK` variable was added to initialize the
:prop_tgt:`FRAMEWORK` property on all targets.
* The :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING` variable and
:prop_tgt:`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 :variable:`CMAKE_MSVC_RUNTIME_LIBRARY` variable and
:prop_tgt:`MSVC_RUNTIME_LIBRARY` target property were introduced to
select the runtime library used by compilers targeting the MSVC ABI.
See policy :policy:`CMP0091`.
* The :variable:`CMAKE_PROJECT_INCLUDE` and
:variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables were added to allow
injection of custom code at the sites of :command:`project` calls
without knowing the project name a priori.
Properties
----------
* The :prop_tgt:`ADDITIONAL_CLEAN_FILES` target property and
:prop_dir:`ADDITIONAL_CLEAN_FILES` directory property were added.
They allow to register additional files that should be removed during
the clean stage.
* The :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` properties
may now be set on :ref:`Interface Libraries`. The headers specified by those
properties can be installed using the :command:`install(TARGETS)` command by
passing the ``PUBLIC_HEADER`` and ``PRIVATE_HEADER`` arguments respectively.
* The :prop_tgt:`VS_PACKAGE_REFERENCES` target property was added to
tell :ref:`Visual Studio Generators` to add references to ``nuget``
packages.
* The :prop_tgt:`VS_PROJECT_IMPORT` target property was added to allow
managed Visual Studio project files to import external ``.props`` files.
* The :prop_tgt:`VS_NO_SOLUTION_DEPLOY` target property was added to
tell :ref:`Visual Studio Generators` whether to deploy an artifact
to the WinCE or Windows Phone target device.
Modules
-------
* The :module:`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 :command:`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
:command:`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 :policy:`CMP0093`.
* The :module:`FindCups` module now provides imported targets.
* The :module:`FindEnvModules` module was added to use Lua- and TCL-based
environment modules in :ref:`CTest Scripts <CTest Script>`.
* The :module:`FindGLEW` module now provides an interface more consistent
with what upstream GLEW provides in its own CMake package files.
* The :module:`FindPkgConfig` now populates :prop_tgt:`INTERFACE_LINK_OPTIONS`
property of imported targets with other (non-library) linker flags.
* The :module:`FindPostgreSQL` module learned to find debug and release
variants separately.
* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
gained additional lookup strategies and controls, and a new default.
See policy :policy:`CMP0094`.
* Modules :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3`
gain a new target (respectively ``Python::Module``, ``Python2::Module``
and ``Python3::Module``) which can be used to develop Python modules.
* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
gain capability to control how virtual environments are handled.
* The :module:`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 :manual:`generator expressions <cmake-generator-expressions(7)>`
``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:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>` were added.
* The ``$<COMPILE_LANG_AND_ID:...>`` generator expression was introduced to
allow specification of compile options for target files based on the
:variable:`CMAKE_<LANG>_COMPILER_ID` and :prop_sf:`LANGUAGE` of
each source file.
* A ``$<FILTER:list,INCLUDE|EXCLUDE,regex>``
:manual:`generator expression <cmake-generator-expressions(7)>`
has been added.
* A ``$<REMOVE_DUPLICATES:list>``
:manual:`generator expression <cmake-generator-expressions(7)>`
has been added.
* The ``$<SHELL_PATH:...>`` :manual:`generator expression
<cmake-generator-expressions(7)>` gained support for a list of paths.
* New ``$<TARGET_FILE*>`` :manual:`generator expressions
<cmake-generator-expressions(7)>` 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:...>`` :manual:`generator expression
<cmake-generator-expressions(7)>` is now supported on ``SHARED``,
``STATIC``, ``MODULE`` libraries and executables.
CTest
-----
* The :command:`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 :command:`ctest_update` command learned to honor a new variable:
: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_gen:`CPack IFW Generator` gained a new
:variable:`CPACK_IFW_PACKAGE_STYLE_SHEET` variable to customize the
installer stylesheet.
Deprecated and Removed Features
===============================
* The :manual:`cmake-server(7)` mode has been deprecated and will be
removed from a future version of CMake. Please port clients to use
the :manual:`cmake-file-api(7)` instead.
* The :prop_dir:`ADDITIONAL_MAKE_CLEAN_FILES` directory property is now
deprecated. Use the :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property
instead.
* The variable :variable:`CMAKE_AUTOMOC_RELAXED_MODE` is considered
deprecated. Support still exists but will be removed in future versions.
* The :command:`export(PACKAGE)` command now does nothing unless
enabled via :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY`.
See policy :policy:`CMP0090`.
* The :generator:`Xcode` generator now requires at least Xcode 5.
* An explicit deprecation diagnostic was added for policy ``CMP0066``
(``CMP0065`` and below were already deprecated).
The :manual:`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 :command:`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 :variable:`CMAKE_<LANG>_FLAGS`
no longer contains warning flags like ``/W3`` by default.
See policy :policy:`CMP0092`.
* IBM Clang-based XL compilers that define ``__ibmxl__`` now use the
compiler id ``XLClang`` instead of ``XL``. See policy :policy:`CMP0089`.
* The :command:`file(REMOVE)` and :command:`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 :variable:`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 :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG`
variable caused the :command:`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 :prop_dir:`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.

View file

@ -0,0 +1,318 @@
CMake 3.16 Release Notes
************************
.. only:: html
.. contents::
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 :command:`project`
and :command:`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 :prop_tgt:`ENABLE_EXPORTS` target property
now produce a linker import file with a ``.imp`` extension in addition
to the executable file. Plugins (created via :command:`add_library` with
the ``MODULE`` option) that use :command:`target_link_libraries` to link
to the executable for its symbols are now linked using the import file.
The :command:`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 :variable:`CMAKE_SHARED_LINKER_FLAGS` or
:variable:`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
:variable:`CMAKE_EXE_LINKER_FLAGS` variable).
Command-Line
------------
* :manual:`cmake(1)` ``-E`` now supports ``true`` and ``false`` commands,
which do nothing while returning exit codes of 0 and 1, respectively.
* :manual:`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 :manual:`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 :command:`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 :command:`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 :module:`GetPrerequisites`.
* The :command:`find_file`, :command:`find_library`, :command:`find_path`,
:command:`find_package`, and :command:`find_program` commands have learned to
check the following variables to control the default behavior for groups of
search locations:
* :variable:`CMAKE_FIND_USE_PACKAGE_ROOT_PATH` - Controls the default
behavior of searching the :variable:`<PackageName>_ROOT` variables.
* :variable:`CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH` - Controls the default
behavior of searching the CMake-specific environment variables.
* :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` - Controls the default
behavior of searching the standard system environment variables.
* :variable:`CMAKE_FIND_USE_CMAKE_PATH` - Controls the default behavior of
searching the CMake-specific cache variables.
* :variable:`CMAKE_FIND_USE_CMAKE_SYSTEM_PATH` - Controls the default
behavior of searching the platform-specific CMake variables.
* The :command:`find_package` command has learned to check the
:variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable to control the default
behavior of searching the CMake user package registry and to check the
:variable:`CMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY` variable to control
the default behavior of searching the CMake system package registry.
* The :command:`message` command learned indentation control with the new
:variable:`CMAKE_MESSAGE_INDENT` variable.
* The :command:`target_precompile_headers` command was added to specify
a list of headers to precompile for faster compilation times.
Variables
---------
* The :variable:`CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS` variable has been
introduced to optionally initialize the
:prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target property.
* The :variable:`CMAKE_ECLIPSE_RESOURCE_ENCODING` variable was added to
specify the resource encoding for the the :generator:`Eclipse CDT4` extra
generator.
* The :variable:`CMAKE_UNITY_BUILD` variable was added to initialize the
:prop_tgt:`UNITY_BUILD` target property to tell generators to batch
include source files for faster compilation times.
Properties
----------
* The :prop_tgt:`BUILD_RPATH` and :prop_tgt:`INSTALL_RPATH` target properties
now support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`INSTALL_REMOVE_ENVIRONMENT_RPATH` target property was
added to remove compiler-defined ``RPATH`` entries from a target.
This property is initialized by the
:variable:`CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH` variable.
* The :prop_tgt:`PRECOMPILE_HEADERS` target property was added to specify
a list of headers to precompile for faster compilation times.
Set it using the :command:`target_precompile_headers` command.
* The :prop_tgt:`UNITY_BUILD` target property was added to tell
generators to batch include source files for faster compilation
times.
* The :prop_tgt:`VS_CONFIGURATION_TYPE` target property now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`VS_DPI_AWARE` target property was added to tell
:ref:`Visual Studio Generators` to set the ``EnableDpiAwareness``
property in ``.vcxproj`` files.
* The :prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING` target property was
added to tell the :generator:`Xcode` generator to set the value of the
``Allow debugging when using document Versions Browser`` schema option.
Modules
-------
* The :module:`FindDoxygen` module :command:`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 :module:`FindGnuTLS` module now provides an imported target.
* The :module:`FindPackageHandleStandardArgs` module
:command:`find_package_handle_standard_args` command gained
a new ``REASON_FAILURE_MESSAGE`` option to specify a message
giving the reason for the failure.
* The :module:`FindPkgConfig` module :command:`pkg_search_module` macro
now defines a ``<prefix>_MODULE_NAME`` result variable containing the
first matching module name.
* The :module:`FindPython3` and :module:`FindPython` modules gained
options to control which ``ABIs`` will be searched.
* The :module:`FindPython3`, :module:`FindPython2`, and :module:`FindPython`
modules now support direct specification of artifacts via cache entries.
Autogen
-------
* When using :prop_tgt:`AUTOMOC`, CMake now generates 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 :command:`include directory <target_include_directories>`).
Also it ensures that ``moc`` output files will compile correctly when the
source and/or build directory is a symbolic link.
The ``moc`` path prefix generation behavior can be configured by setting
the new :variable:`CMAKE_AUTOMOC_PATH_PREFIX` variable and/or
:prop_tgt:`AUTOMOC_PATH_PREFIX` target property.
CTest
-----
* :manual:`ctest(1)` now has the ability to schedule tests based on resource
requirements for each test. See :ref:`ctest-resource-allocation` for
details.
* A new test property, :prop_test:`SKIP_REGULAR_EXPRESSION`, has been added.
This property is similar to :prop_test:`FAIL_REGULAR_EXPRESSION` and
:prop_test:`PASS_REGULAR_EXPRESSION`, but with the same meaning as
:prop_test:`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 :prop_test:`SKIP_RETURN_CODE`.
CPack
-----
* :manual:`cpack(1)` learned support for multiple configurations for ``-C``
option.
* The :cpack_gen:`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
:variable:`CPACK_PACKAGE_DESCRIPTION_FILE` and
:variable:`CPACK_DEBIAN_<COMPONENT>_DESCRIPTION` variables.
* The :cpack_gen:`CPack Archive Generator` learned to generate ``.tar.zst``
packages with Zstandard compression.
.. _`Debian Policy Manual`: https://www.debian.org/doc/debian-policy/ch-controlfields.html#description
Deprecated and Removed Features
===============================
* An explicit deprecation diagnostic was added for policy ``CMP0067``
(``CMP0066`` and below were already deprecated).
The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.
* The :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` variable has been
deprecated. Use the :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` variable
instead.
* The :module:`GetPrerequisites` module has been deprecated, as it has been
superceded by :command:`file(GET_RUNTIME_DEPENDENCIES)`.
* The ``CPACK_INSTALL_SCRIPT`` variable has been deprecated in favor of the
new, more accurately named :variable:`CPACK_INSTALL_SCRIPTS` variable.
Other Changes
=============
* The :manual:`cmake(1)` ``-C <initial-cache>`` option now evaluates the
initial cache script with :variable:`CMAKE_SOURCE_DIR` and
:variable:`CMAKE_BINARY_DIR` set to the top-level source and build trees.
* The :manual:`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 :manual:`ctest(1)` ``--build-makeprogram`` command-line option now
specifies the make program used when configuring a project with the
:generator:`Ninja` generator or the :ref:`Makefile Generators`.
* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
has been updated so that ``GIT_SUBMODULES ""`` initializes no submodules.
See policy :policy:`CMP0097`.
* The :module:`FindGTest` module has been updated to recognize
MSVC build trees generated by GTest 1.8.1.
* The :command:`project` command no longer strips leading zeros in version
components. See policy :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 :policy:`CMP0095`.
* When using :variable:`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 :prop_tgt:`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 :module:`FindPython`, :module:`FindPython2`, and :module:`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
:envvar:`CC` or :envvar:`CXX` environment variable if the
:envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
* The :module:`FindPkgConfig` module now extracts include directories
prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
Previously they would be places in ``*_CFLAGS_OTHER`` variables and
:prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.

View file

@ -0,0 +1,348 @@
CMake 3.17 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.16 include the following.
New Features
============
Generators
----------
* :manual:`cmake(1)` gained a :generator:`Ninja Multi-Config` generator,
which is similar to the :generator:`Ninja` generator but can be used to build
multiple configurations at once.
* :ref:`Visual Studio Generators` learned to support per-config sources.
Previously only :ref:`Command-Line Build Tool Generators` supported them.
* :ref:`Visual Studio Generators` for VS 2010 and above now support
specifying the ``VCTargetsPath`` value for project files in
:variable:`CMAKE_GENERATOR_TOOLSET` setting.
* :ref:`Visual Studio Generators` for VS 2010 and above learned to
support .NET Standard and .NET Core. See the
:prop_tgt:`DOTNET_TARGET_FRAMEWORK` target property and
associated :variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` variable.
Languages
---------
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
now offers meta-features for the CUDA language standard levels
(e.g. ``cuda_std_03``, ``cuda_std_14``). See
:prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES`.
Compilers
---------
* The IBM XL Fortran compiler is now supported by the :generator:`Ninja`
generator.
Command-Line
------------
* :manual:`cmake(1)` gained a ``--debug-find`` command-line option to
enable additional human-readable output on where ``find_*`` commands search.
* :manual:`cmake(1)` gained a ``--trace-format`` command-line option that
can be used to set the ``--trace`` output format. Currently, the old
human readable and the new JSON format are supported. The new JSON format
is easier to parse automatically than the existing format.
* :manual:`cmake(1)` gained a ``-E rm`` command-line tool that can be
used to remove directories and files. This supersedes the existing
``-E remove`` and ``-E remove_directory`` tools and has better semantics.
Commands
--------
* The :command:`add_custom_command` command learned to interpret paths in
``DEPENDS`` arguments that are specified relative to the current
binary directory.
* The :command:`foreach` command learned a new ``ZIP_LISTS`` option to iterate
over multiple lists simultaneously.
* The :command:`load_cache(READ_WITH_PREFIX)` command mode is now allowed
when using ``cmake -P`` to :ref:`Run a Script <Script Processing Mode>`.
* The :command:`message` command learned to output context provided in
the :variable:`CMAKE_MESSAGE_CONTEXT` variable for log levels
``NOTICE`` and below. Enable this output with the new ``--log-context``
command-line option or :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` variable.
* The :command:`message` command gained new keywords ``CHECK_START``,
``CHECK_PASS`` and ``CHECK_FAIL``.
* The :command:`target_compile_options` command now honors the ``BEFORE``
keyword more consistently. See policy :policy:`CMP0101`.
Variables
---------
* A :variable:`CMAKE_CTEST_ARGUMENTS` variable was added to specify a list
of command-line arguments passed to CTest when running through the
``test`` (or ``RUN_TESTS``) target of the generated build system.
* The following variables are now defined inside a :command:`function`:
- :variable:`CMAKE_CURRENT_FUNCTION`
- :variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`
- :variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`
- :variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`
* The :variable:`CMAKE_CUDA_RUNTIME_LIBRARY` variable and
:prop_tgt:`CUDA_RUNTIME_LIBRARY` target property were introduced to
select the CUDA runtime library used when linking targets that
use CUDA.
* The :variable:`CMAKE_FIND_DEBUG_MODE` variable was introduced to
print extra ``find_*`` call information during the cmake run to standard
error. Output is designed for human consumption and not for parsing.
* The :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable now takes its
initial value from the :envvar:`CMAKE_EXPORT_COMPILE_COMMANDS` environment
variable if no explicit configuration is given.
* The :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable, if not set
explicitly, now takes its initial value from the
:envvar:`CMAKE_<LANG>_COMPILER_LAUNCHER` environment variable.
* The :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable can now be used
to persist a log level between CMake runs, unlike the ``--log-level``
command line option which only applies to that particular run.
* The :variable:`CMAKE_XCODE_SCHEME_ENVIRONMENT` variable was added
to initialize the :prop_tgt:`XCODE_SCHEME_ENVIRONMENT` target property.
* The :variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` variable and
associated :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY` target property
were added to tell the :generator:`Xcode` generator to set the value of
the ``Custom Working Directory`` schema option.
Properties
----------
* The :prop_tgt:`AIX_EXPORT_ALL_SYMBOLS` target property and associated
:variable:`CMAKE_AIX_EXPORT_ALL_SYMBOLS` variable were created to
optionally explicitly disable automatic export of symbols from shared
libraries on AIX.
* The :prop_tgt:`DEPRECATION` target property was added to mark
a target as deprecated. If a linked target is marked as
deprecated, a warning with the deprecation message is issued
at generate time.
* The :prop_tgt:`INSTALL_NAME_DIR` target property now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
In particular, the ``$<INSTALL_PREFIX>`` generator expression can
be used to set the directory relative to the install-time prefix.
* Target properties :prop_tgt:`MACHO_COMPATIBILITY_VERSION` and
:prop_tgt:`MACHO_CURRENT_VERSION` were added to set the
``compatibility_version`` and ``curent_version``, respectively,
for Mach-O binaries. For backwards compatibility, if these properties
are not set, :prop_tgt:`SOVERSION` and :prop_tgt:`VERSION`
are used respectively as fallbacks.
* The :prop_tgt:`VS_DOTNET_DOCUMENTATION_FILE` target property was added
to tell :ref:`Visual Studio Generators` to generate a ``DocumentationFile``
reference in ``.csproj`` files.
Modules
-------
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
command gained a ``GIT_SUBMODULES_RECURSE`` option to specify whether
Git submodules should be updated recursively. The default is on to
preserve existing behavior.
* The :module:`FindCUDAToolkit` module was added to find the
CUDA Toolkit without enabling CUDA as a language.
* The :module:`FindCURL` module learned to find CURL using
the ``CURLConfig.cmake`` package configuration file generated by
CURL's cmake buildsystem. It also gained a new ``CURL_NO_CURL_CMAKE``
option to disable this behavior.
* The :module:`FindFLEX` module's ``FLEX_TARGET`` command now runs ``flex``
with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory.
See policy :policy:`CMP0098`.
* The :module:`FindLibArchive` module now provides an imported target
for libarchive.
* The :module:`FindPython` module has learned to find Python components
in active virtual environments managed by ``conda``.
* The :module:`FindPython3` and :module:`FindPython` modules gained,
respectively, variable ``Python3_SOABI`` and ``Python_SOABI`` giving
the standard extension suffix for modules. Moreover, commands
``Python3_add_library()`` and ``Python_add_library()`` gained the option
``WITH_SOABI`` to prefix the library suffix with the value of ``SOABI``.
* The :module:`FindLibXml2` module now provides an imported target for the
``xmllint`` executable.
Autogen
-------
* :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` learned to process headers
with a ``.hh`` extension. See policy :policy:`CMP0100`.
CTest
-----
* The :variable:`CTEST_CONFIGURATION_TYPE` variable is now set from the
command line when :manual:`ctest(1)` is invoked with ``-C <cfg>``.
* The :manual:`ctest(1)` tool gained support for Dr. Memory to run
memcheck runs.
* The :manual:`ctest(1)` tool gained a ``--no-tests=<[error|ignore]>`` option
to explicitly set and unify the behavior between direct invocation and
script mode if no tests were found.
* The :manual:`ctest(1)` tool gained a ``--repeat <mode>:<n>`` option
to specify conditions in which to repeat tests. This generalizes
the existing ``--repeat-until-fail <n>`` option to add modes for
``until-pass`` and ``after-timeout``.
* The :command:`ctest_test` command gained a ``REPEAT <mode>:<n>`` option
to specify conditions in which to repeat tests.
CPack
-----
* The :cpack_gen:`CPack DragNDrop Generator` learned to use
the :variable:`CPACK_DMG_<component>_FILE_NAME` variable
to set a custom filename when packaging components into
their own DMGs.
* The :cpack_gen:`CPack DragNDrop Generator` learned to handle
RTF formatted license files. When :variable:`CPACK_DMG_SLA_DIR`
variable is set, ``<language>.license.rtf`` is considered, but
only as a fallback when the plaintext (``.txt``) file is not found
in order to maintain backwards compatibility.
* The :cpack_gen:`CPack NSIS Generator` gained a new variable
:variable:`CPACK_NSIS_MUI_HEADERIMAGE` to set the header image.
To not break existing setups, it still defaults to
:variable:`CPACK_PACKAGE_ICON` if the new variable is not set.
* The :cpack_gen:`CPack NSIS Generator` now supports
:variable:`CPACK_NSIS_UNINSTALL_NAME`.
This can be used to specify the name of the Uninstall program.
* The :cpack_gen:`CPack NSIS Generator` now supports
:variable:`CPACK_NSIS_WELCOME_TITLE` and
:variable:`CPACK_NSIS_WELCOME_TITLE_3LINES`.
These can be used to specify the welcome page title and display it in 3 lines.
* The :cpack_gen:`CPack NSIS Generator` now supports
:variable:`CPACK_NSIS_FINISH_TITLE` and
:variable:`CPACK_NSIS_FINISH_TITLE_3LINES`.
These can be used to specify the finish page title and display it in 3 lines.
* The :cpack_gen:`CPack productbuild Generator` gained support for a
:variable:`CPACK_PRODUCTBUILD_BACKGROUND` variable to specify a background
image for the macOS installer.
Other
-----
* :manual:`ccmake(1)` now displays cache values using colors
based on the entry type if the terminal supports color.
* :manual:`ccmake(1)` now displays messages and a progress bar during
configure and generate. It will keep the output displayed if any
errors or warnings occurred.
Deprecated and Removed Features
===============================
* An explicit deprecation diagnostic was added for policy ``CMP0068``
and policy ``CMP0069`` (``CMP0067`` and below were already deprecated).
The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
of all policies are deprecated and that projects should port to the
NEW behaviors.
* The :cpack_gen:`CPack PackageMaker Generator` generator has been
deprecated because Xcode no longer distributes the PackageMaker tools.
The undocumented ``OSXX11`` generator has also been deprecated.
* The :manual:`cmake(1)` command-line ``-E remove`` and ``-E remove_directory``
tools are deprecated in favor of the new ``-E rm`` tool. The older tools
always returned 0 if a named path did not exist even without the force
option and cannot be fixed without breaking compatibility, and so have
been superseded.
* The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.0 or later.
Other Changes
=============
* The :manual:`file API <cmake-file-api(7)>` index file now emits a
``multiConfig`` flag specifying whether or not the generator supports
multiple output configurations.
* Target link properties :prop_tgt:`INTERFACE_LINK_OPTIONS`,
:prop_tgt:`INTERFACE_LINK_DIRECTORIES` and
:prop_tgt:`INTERFACE_LINK_DEPENDS` are now transitive over private
dependencies on static libraries.
See policy :policy:`CMP0099`.
* When using MinGW tools, the :command:`find_library` command no longer
finds ``.dll`` files by default. Instead, it expects ``.dll.a`` import
libraries to be available.
* The :generator:`MinGW Makefiles` generator no longer issues an error if
``sh.exe`` is present in the environment's ``PATH``.
* The :generator:`Ninja` generator now prefers the first ninja build
tool to appear in the ``PATH`` no matter whether it is called
``ninja-build``, ``ninja``, or ``samu``. Previously the first
of those names to appear anywhere in the ``PATH`` would be preferred.
* With SDCC the ``sdar`` tool is now preferred over ``sdcclib`` as librarian.
The latter was deprecated by SDCC 3.2.0 and removed in SDCC 3.8.6.
* With SDCC the default flags no longer include any target-specific flags.
Previously the default flags were hard-coded for 8051.
* The :variable:`CMAKE_VS_GLOBALS` variable value now applies during
compiler identification and in targets created by the
:command:`add_custom_target` command.
* The :generator:`Xcode` generator no longer hard-codes ``-Wmost``,
``-Wno-four-char-constants``, and ``-Wno-unknown-pragmas`` warning flags.
Updates
=======
Changes made since CMake 3.17.0 include the following.
3.17.1
------
* CMake 3.17.0 updated the :cpack_gen:`CPack NSIS Generator` with changes
that require NSIS 3.0 or later. CMake 3.17.1 now enforces the use
of a sufficiently new version.
3.17.3
------
* Selection of the Objective C or C++ compiler now considers the
:envvar:`CC` or :envvar:`CXX` environment variable if the
:envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
* The :module:`FindPkgConfig` module now extracts include directories
prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
Previously they would be places in ``*_CFLAGS_OTHER`` variables and
:prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.

View file

@ -0,0 +1,356 @@
CMake 3.18 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.17 include the following.
New Features
============
Languages
---------
* The ``CUDA`` language can now be compiled using Clang on non-Windows
platforms. Separable compilation is not yet supported on any platform.
Command-Line
------------
* :manual:`cmake(1)` gained support for profiling of CMake scripts through
the parameters ``--profiling-output`` and ``--profiling-format``.
* :manual:`cmake(1)` gained a ``cat`` command line
option that can be used to concatenate files and print them
on standard output.
Commands
--------
* The :command:`add_library` and :command:`add_executable` commands
learned to create :ref:`Alias Targets` referencing non-``GLOBAL``
:ref:`Imported Targets`.
* The :command:`cmake_language()` command was added for meta-operations on
scripted or built-in commands, starting with a mode to ``CALL`` other
commands, and ``EVAL CODE`` to inplace evaluate a CMake script.
* The :command:`execute_process` command gained the ``ECHO_OUTPUT_VARIABLE``
and ``ECHO_ERROR_VARIABLE`` options.
* The :command:`export` command now raise an error if used multiple times with
same ``FILE`` without ``APPEND``. See policy :policy:`CMP0103`.
* The :command:`file` command gained the ``ARCHIVE_CREATE`` and
``ARCHIVE_EXTRACT`` subcommands to expose the :manual:`cmake(1)` ``-E tar``
functionality to CMake scripting code.
* The :command:`file(CONFIGURE)` subcommand was created in order to replicate
the :command:`configure_file` functionality without resorting to a
pre-existing file on disk as input. The content is instead passed as a
string.
* The :command:`file(UPLOAD)` command gained ``TLS_VERIFY`` and ``TLS_CAINFO``
options to control server certificate verification.
* The :command:`find_program`, :command:`find_library`, :command:`find_path`
and :command:`find_file` commands gained a new ``REQUIRED`` option that will
stop processing with an error message if nothing is found.
* The :command:`get_property` command with ``SOURCE`` scope gained the
``DIRECTORY`` and ``TARGET_DIRECTORY`` options to get a property
from the provided directory scope.
* The :command:`get_source_file_property` command gained the ``DIRECTORY``
and ``TARGET_DIRECTORY`` options to get a property from the
provided directory scope.
* The :command:`list` operation ``SORT`` gained the ``NATURAL`` sort
option to sort using natural order (see ``strverscmp(3)`` manual).
* The :command:`set_property` command with the ``SOURCE`` scope gained the
``DIRECTORY`` and ``TARGET_DIRECTORY`` options to set properties
in the provided directory scopes.
* The :command:`set_source_files_properties` command gained the ``DIRECTORY``
and ``TARGET_DIRECTORY`` options to set properties in the provided
directory scopes.
* The :command:`string` command learned a new ``HEX`` sub-command, which
converts strings into their hexadecimal representation.
Variables
---------
* A :variable:`CMAKE_CUDA_ARCHITECTURES` variable was added to specify
CUDA output architectures. Users are encouraged to use this instead of
specifying options manually, as this approach is compiler-agnostic.
The variable is initialized automatically when
:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
The variable is used to initialize the new :prop_tgt:`CUDA_ARCHITECTURES`
target property. See policy :policy:`CMP0104`.
* The :variable:`CMAKE_PCH_WARN_INVALID` variable was added to initialize the
:prop_tgt:`PCH_WARN_INVALID` target property to allow the removal of the
precompiled header invalid warning.
Properties
----------
* The :prop_tgt:`CUDA_ARCHITECTURES` target property was added to specify
CUDA output architectures. Users are encouraged to use this instead of
specifying options manually, as this approach is compiler-agnostic.
The property is initialized by the new :variable:`CMAKE_CUDA_ARCHITECTURES`
variable. See policy :policy:`CMP0104`.
* The :prop_tgt:`Fortran_PREPROCESS` target property and
:prop_sf:`Fortran_PREPROCESS` source-file property were added to
control preprocessing of Fortran source files.
* The :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` target property
and associated :variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`
variable were created to allow adding a postfix to the name of a
framework file name when using a multi-config generator.
* The :prop_sf:`OBJECT_OUTPUTS` source file property now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`PCH_WARN_INVALID` target property was added to allow the
removal of the precompiled header invalid warning.
* The :prop_tgt:`UNITY_BUILD_MODE` target property was added to tell
generators which algorithm to use for grouping included source
files.
* The :prop_tgt:`VS_SOURCE_SETTINGS_<tool>` target property was added
to tell :ref:`Visual Studio Generators` for VS 2010 and above to add
metadata to non-built source files using ``<tool>``.
* The :prop_sf:`VS_SETTINGS` source file property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to add
metadata to a non-built source file.
* The :prop_tgt:`VS_PLATFORM_TOOLSET` target property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to override
the platform toolset.
* The :prop_tgt:`VS_SOLUTION_DEPLOY` target property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to mark a
target for deployment even when not building for Windows Phone/Store/CE.
Modules
-------
* The :module:`CheckLinkerFlag` module has been added to provide a
facility to check validity of link flags.
* The :module:`ExternalProject` module :command:`ExternalProject_Add` command
gained a new ``GIT_REMOTE_UPDATE_STRATEGY`` keyword. This can be used to
specify how failed rebase operations during a git update should be handled.
The ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` variable was also added as a
global default and is honored by both the :module:`ExternalProject` and
:module:`FetchContent` modules.
* The :module:`FetchContent` module :command:`FetchContent_Declare` command
now supports a ``SOURCE_SUBDIR`` option. It can be used to direct
:command:`FetchContent_MakeAvailable` to look in a different location
for the ``CMakeLists.txt`` file.
* The :module:`FindBLAS` module now provides an imported target.
* The :module:`FindCUDAToolkit` module:
* gained the variable
``CUDAToolkit_LIBRARY_ROOT``, which is the directory containing the
``nvvm`` directory and ``version.txt``.
* uses toolkit and library root found during ``CUDA`` compiler detection.
* The :module:`FindLAPACK` module now provides an imported target.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules:
* gained the possibility to create per-artifact cache variables for
interactive editing in :manual:`cmake-gui(1)` and :manual:`ccmake(1)`.
* gained sub-components ``Development.Module`` and
``Development.Embed`` under the ``Development`` component.
* gained the capability to specify which Python implementations to find,
including ``IronPython`` and ``PyPy``.
* The :module:`FindRuby` module input and output variables were all renamed
from ``RUBY_`` to ``Ruby_`` for consistency with other find modules.
Input variables of the old case will be honored if provided, and output
variables of the old case are always provided.
* The :module:`FindSWIG` module now accepts target languages as ``COMPONENTS``
and ``OPTIONAL_COMPONENTS`` arguments to ``find_package``.
* The :module:`GoogleTest` module :command:`gtest_discover_tests` command:
* gained a new ``DISCOVERY_MODE`` option to control when the test
discovery step is run. It offers a new ``PRE_TEST`` setting to
run the discovery at test time instead of build time. A new
``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable can be used
to change the default globally.
* gained a new optional parameter ``XML_OUTPUT_DIR``. When set the
JUnit XML test results are stored in that directory.
* The :module:`FindLibXslt` module now provides imported targets.
* The :module:`UseSWIG` module now supports Fortran as a target language if
the ``SWIG_EXECUTABLE`` is SWIG-Fortran_.
.. _`SWIG-Fortran`: https://github.com/swig-fortran/swig
Generator Expressions
---------------------
* The ``$<DEVICE_LINK:...>`` and ``$<HOST_LINK:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>` were added
to manage device and host link steps.
* The ``$<LINK_LANGUAGE:...>`` and ``$<LINK_LANG_AND_ID:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>` were added.
CTest
-----
* :manual:`ctest(1)` gained a new :variable:`CTEST_RESOURCE_SPEC_FILE`
variable, which can be used to specify a
:ref:`resource specification file <ctest-resource-specification-file>`.
* :manual:`ctest(1)` gained a ``--stop-on-failure`` option,
which can be used to stop running the tests once one has failed.
* The :command:`ctest_test` command gained a ``STOP_ON_FAILURE`` option
which can be used to stop running the tests once one has failed.
* The :module:`CTestCoverageCollectGCOV` module
:command:`ctest_coverage_collect_gcov` command gained a
``TARBALL_COMPRESSION`` option to control compression of the
tarball of collected results.
CPack
-----
* The :cpack_gen:`CPack Archive Generator`'s ``TXZ`` format learned the
:variable:`CPACK_ARCHIVE_THREADS` variable to enable parallel compression.
Requires support in the ``liblzma`` used by CMake.
* The :cpack_gen:`CPack NSIS Generator` gained a new variable
:variable:`CPACK_NSIS_MANIFEST_DPI_AWARE` to declare that the
installer is DPI-aware.
* The :cpack_gen:`CPack RPM Generator` gained
:variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE` and
:variable:`CPACK_RPM_POST_TRANS_SCRIPT_FILE`
variables to specify pre- and post-transaction scripts.
Other
-----
* :manual:`cmake-gui(1)` now populates its generator selection
widget default value from the :envvar:`CMAKE_GENERATOR` environment
variable. Additionally, environment variables
:envvar:`CMAKE_GENERATOR_PLATFORM` and :envvar:`CMAKE_GENERATOR_TOOLSET`
are used to populate their respective widget defaults.
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
environment variable to customize colors.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of the availability of C11 features in MSVC 19.27 and above,
including support for the ``c_restrict`` feature and the ``-std:c11`` flag.
Deprecated and Removed Features
===============================
* The :module:`Documentation` module has been deprecated via
:policy:`CMP0106`. This module was essentially VTK code that CMake should
not be shipping anymore.
* An explicit deprecation diagnostic was added for policy ``CMP0070``
and policy ``CMP0071`` (``CMP0069`` and below were already deprecated).
The :manual:`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
=============
* On Windows, the :generator:`Ninja` and :generator:`Ninja Multi-Config`
generators, when a compiler is not explicitly specified, now select
the first compiler (of any name) found in directories listed by the
``PATH`` environment variable.
* The :prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
properties are now used for the device link step.
See policy :policy:`CMP0105`.
* Creation of an ``ALIAS`` target overwriting an existing target now raises an
error. See policy :policy:`CMP0107`.
* Linking a target to itself through an alias now raises an error.
See policy :policy:`CMP0108`.
* The :module:`FindPackageHandleStandardArgs` module option ``REQUIRED_VARS``
is now optional if ``HANDLE_COMPONENTS`` is specified.
* The :command:`source_group` command now also recognizes forward slashes
as subgroup delimiters, not just backslashes.
* :manual:`ctest(1)` now logs environment variables that it sets for each test,
either due to the :prop_test:`ENVIRONMENT` property or the
:ref:`resource allocation <ctest-resource-allocation>` feature, and submits
this log to CDash. It does not log environment variables that were set
outside of CTest.
* When building CMake itself from source and not using a system-provided
libcurl, HTTP/2 support is now enabled for commands supporting
network communication via ``http(s)``, such as :command:`file(DOWNLOAD)`,
:command:`file(UPLOAD)`, and :command:`ctest_submit`.
The precompiled binaries provided on ``cmake.org`` now support HTTP/2.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
been updated to 2.1.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
a new ``precompileHeaders`` field in the ``compileGroups`` objects.
Updates
=======
Changes made since CMake 3.18.0 include the following.
3.18.1
------
* The :generator:`Xcode` generator, when :variable:`CMAKE_OSX_ARCHITECTURES`
is not defined, now selects ``$(NATIVE_ARCH_ACTUAL)`` as the default
architecture (the Xcode ``ARCHS`` setting). This is needed for Xcode 12
to select the host's architecture, which older versions of Xcode did
by default.
* In CMake 3.18.0 the :command:`add_test` command learned to support
special characters in test names. This was accidentally left out of
its release notes. Unfortunately the fix breaks existing projects
that were using manual quoting or escaping to work around the prior
limitation. This fix has been reverted in 3.18.1, but may be
re-introduced in future versions of CMake with a policy for compatibility.
3.18.2
------
* The default value of :variable:`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.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
was updated for MSVC 19.27 as mentioned above.

View file

@ -0,0 +1,277 @@
CMake 3.2 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.1 include the following.
New Features
============
Syntax
------
* CMake learned to support unicode characters
:ref:`encoded as UTF-8 <CMake Language Encoding>`
on Windows. This was already supported on platforms whose
system APIs accept UTF-8 encoded strings.
Unicode characters may now be used in CMake code, paths to
source files, configured files such as ``.h.in`` files, and
other files read and written by CMake. Note that because CMake
interoperates with many other tools, there may still be some
limitations when using certain unicode characters.
Commands
--------
* The :command:`add_custom_command` and :command:`add_custom_target`
commands learned a new ``BYPRODUCTS`` option to specify files
produced as side effects of the custom commands. These are not
outputs because they do not always have to be newer than inputs.
* The :command:`add_custom_command` and :command:`add_custom_target`
commands learned a new ``USES_TERMINAL`` option to request that
the command be given direct access to the terminal if possible.
The :generator:`Ninja` generator will places such commands in the
``console`` :prop_gbl:`pool <JOB_POOLS>`. Build targets provided by CMake
that are meant for individual interactive use, such as ``install``, are now
placed in this pool.
* A new :command:`continue` command was added that can be called inside loop
contexts to end the current iteration and start the next one at the top of
the loop block.
* The :command:`file(LOCK)` subcommand was created to allow CMake
processes to synchronize through file and directory locks.
* The :command:`file(STRINGS)` now supports UTF-16LE, UTF-16BE,
UTF-32LE, UTF-32BE as ``ENCODING`` options.
* The :command:`install(EXPORT)` command now works with an absolute
``DESTINATION`` even if targets in the export set are installed
with a destination or :ref:`usage requirements <Target Usage Requirements>`
specified relative to the install prefix. The value of the
:variable:`CMAKE_INSTALL_PREFIX` variable is hard-coded into the installed
export file as the base for relative references.
* The :command:`try_compile` command source file signature now honors
link flags (e.g. :variable:`CMAKE_EXE_LINKER_FLAGS`) in the generated
test project. See policy :policy:`CMP0056`.
* The :command:`try_run` command learned to honor the ``LINK_LIBRARIES``
option just as :command:`try_compile` already does.
* The :command:`file(GENERATE)` command now generates the output file with
the same permissions as the input file if set.
* The :command:`file(GENERATE)` command can now generate files which are
used as source files for buildsystem targets. Generated files
automatically get their :prop_sf:`GENERATED` property set to ``TRUE``.
Variables
---------
* The :variable:`CMAKE_MATCH_COUNT` variable was introduced to record the
number of matches made in the last regular expression matched in an
:command:`if` command or a :command:`string` command.
Properties
----------
* An :prop_tgt:`ANDROID_API_MIN` target property was introduced to
specify the minimum version to be targeted by the toolchain.
* A :prop_sf:`VS_SHADER_FLAGS` source file property was added to specify
additional shader flags to ``.hlsl`` files, for the Visual Studio
generators.
Modules
-------
* The :module:`ExternalData` module learned to support
:ref:`Custom Fetch Scripts <ExternalData Custom Fetch Scripts>`.
This allows projects to specify custom ``.cmake`` scripts for
fetching data objects during the build.
* The :module:`ExternalProject` module learned options to create
independent external project step targets that do not depend
on the builtin steps.
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
command learned a new ``CMAKE_CACHE_DEFAULT_ARGS`` option to
initialize cache values in the external project without setting
them on future builds.
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
command learned a new ``TEST_EXCLUDE_FROM_MAIN`` option to exclude
tests from the main build.
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
command learned a new ``UPDATE_DISCONNECTED`` option to avoid
automatically updating the source tree checkout from version control.
* The :module:`FindCUDA` module learned about the ``cusolver``
library in CUDA 7.0.
* The :module:`FindGit` module learned to find the ``git`` command-line tool
that comes with GitHub for Windows installed in user home directories.
* A :module:`FindGSL` module was introduced to find the
GNU Scientific Library.
* A :module:`FindIntl` module was introduced to find the
Gettext ``libintl`` library.
* The :module:`FindLATEX` module learned to support components.
* The :module:`FindMPI` module learned to find MS-MPI on Windows.
* The :module:`FindOpenSSL` module now reports ``crypto`` and ``ssl``
libraries separately in ``OPENSSL_CRYPTO_LIBRARY`` and
``OPENSSL_SSL_LIBRARY``, respectively, to allow applications to
link to one without the other.
* The :module:`WriteCompilerDetectionHeader` module learned to
create a define for portability of the ``cxx_thread_local`` feature.
The define expands to either the C++11 ``thread_local`` keyword, or a
pre-standardization compiler-specific equivalent, as appropriate.
* The :module:`WriteCompilerDetectionHeader` module learned to create
multiple output files per compiler and per language, instead of creating
one large file.
CTest
-----
* The :command:`ctest_coverage` command learned to support Delphi coverage.
* The :command:`ctest_coverage` command learned to support Javascript coverage.
* The :module:`CTestCoverageCollectGCOV` module was introduced as an
alternative to the :command:`ctest_coverage` command for collecting
``gcov`` results for submission to CDash.
CPack
-----
* The :cpack_gen:`CPack RPM Generator` learned options to set per-component
descriptions and summaries. See the
:variable:`CPACK_RPM_<component>_PACKAGE_DESCRIPTION` and
:variable:`CPACK_RPM_<component>_PACKAGE_SUMMARY` variables.
* The :cpack_gen:`CPack RPM Generator` learned options to specify
requirements for pre- and post-install scripts. See the
:variable:`CPACK_RPM_PACKAGE_REQUIRES_PRE` and
:variable:`CPACK_RPM_PACKAGE_REQUIRES_POST` variables.
* The :cpack_gen:`CPack RPM Generator` learned options to specify
requirements for pre- and post-uninstall scripts. See the
:variable:`CPACK_RPM_PACKAGE_REQUIRES_PREUN` and
:variable:`CPACK_RPM_PACKAGE_REQUIRES_POSTUN` variables.
* The :cpack_gen:`CPack RPM Generator` learned a new
:variable:`CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX` variable to
specify a component-specific value to use instead of
:variable:`CPACK_PACKAGING_INSTALL_PREFIX`.
* The :cpack_gen:`CPack RPM Generator` learned a new
:variable:`CPACK_RPM_RELOCATION_PATHS` variable to
specify multiple relocation prefixes for a single rpm package.
Other
-----
* The :manual:`cmake(1)` ``-E tar`` command now supports creating
``.xz``-compressed archives with the ``J`` flag.
* The :manual:`cmake(1)` ``-E tar`` command learned a new
``--files-from=<file>`` option to specify file names using
lines in a file to overcome command-line length limits.
* The :manual:`cmake(1)` ``-E tar`` command learned a new
``--mtime=<date>`` option to specify the modification time
recorded in tarball entries.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by more compilers, including:
* Apple Clang (``AppleClang``) for Xcode versions 4.4 though 6.1.
* GNU compiler versions 4.4 through 5.0 on UNIX and Apple (``GNU``).
* Microsoft Visual Studio (``MSVC``) for versions 2010 through 2015.
* Oracle SolarisStudio (``SunPro``) version 12.4.
* The :ref:`Qt AUTORCC` feature now tracks files listed in ``.qrc`` files
as dependencies. If an input file to the ``rcc`` tool is changed, the tool
is automatically re-run.
New Diagnostics
===============
* The :command:`break` command now rejects calls outside of a loop
context or that pass arguments to the command.
See policy :policy:`CMP0055`.
Deprecated and Removed Features
===============================
* Files written in the :manual:`cmake-language(7)`, such as
``CMakeLists.txt`` or ``*.cmake`` files, are now expected to be
encoded as UTF-8. If files are already ASCII, they will be
compatible. If files were in a different encoding, including
Latin 1, they will need to be converted.
* The :module:`FindOpenGL` module no longer explicitly searches
for any dependency on X11 libraries with the :module:`FindX11`
module. Such dependencies should not need to be explicit.
Applications using X11 APIs themselves should find and link
to X11 libraries explicitly.
* The implementation of CMake now relies on some C++ compiler features which
are not supported by some older compilers. As a result, those old compilers
can no longer be used to build CMake itself. CMake continues to be able to
generate Makefiles and project files for users of those old compilers
however. Compilers known to no longer be capable of building CMake are:
* Visual Studio 6 and 7.0 -- superseded by VisualStudio 7.1 and newer.
* GCC 2.95 -- superseded by GCC 3 and newer compilers.
* Borland compilers -- superseded by other Windows compilers.
* Compaq compilers -- superseded by other compilers.
* SGI compilers -- IRIX was dropped as a host platform.
Other Changes
=============
* On Windows and OS X, commands supporting network communication
via ``https``, such as :command:`file(DOWNLOAD)`,
:command:`file(UPLOAD)`, and :command:`ctest_submit`, now support
SSL/TLS even when CMake is not built against OpenSSL.
The Windows or OS X native SSL/TLS implementation is used by default.
OS-configured certificate authorities will be trusted automatically.
On other platforms, when CMake is built with OpenSSL, these
commands now search for OS-configured certificate authorities
in a few ``/etc`` paths to be trusted automatically.
* On OS X with Makefile and Ninja generators, when a compiler is found
in ``/usr/bin`` it is now mapped to the corresponding compiler inside
the Xcode application folder, if any. This allows such build
trees to continue to work with their original compiler even when
``xcode-select`` switches to a different Xcode installation.
* The Visual Studio generators now write solution and project
files in UTF-8 instead of Windows-1252. Windows-1252 supported
Latin 1 languages such as those found in North and South America
and Western Europe. With UTF-8, additional languages are now
supported.
* The :generator:`Xcode` generator no longer requires a value for
the :variable:`CMAKE_MAKE_PROGRAM` variable to be located up front.
It now locates ``xcodebuild`` when needed at build time.
* When building CMake itself using SolarisStudio 12, the default ``libCStd``
standard library is not sufficient to build CMake. The SolarisStudio
distribution supports compiler options to use ``STLPort4`` or ``libstdc++``.
An appropriate option to select the standard library is now added
automatically when building CMake with SolarisStudio compilers.

View file

@ -0,0 +1,287 @@
CMake 3.3 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.2 include the following.
New Features
============
Generators
----------
* The :ref:`Makefile Generators` now add ``.DELETE_ON_ERROR`` to the
makefiles that contain the actual build rules for files on disk.
This tells GNU make to remove rule outputs when their recipe
modifies an output but fails.
* The :ref:`Visual Studio Generators` learned to support ``.xaml``
source files and automatically associate them with corresponding
``.h`` and ``.cpp`` sources.
* A new experimental :generator:`Green Hills MULTI` generator was
added on Windows. `Green Hills MULTI`_ is an IDE for embedded
real-time systems.
.. _`Green Hills MULTI`: http://www.ghs.com/products/MULTI_IDE.html
Commands
--------
* The :command:`add_dependencies` command learned to allow dependencies
to be added to :ref:`interface libraries <Interface Libraries>`.
Dependencies added to an interface library are followed transitively
in its place since the target itself does not build.
* The :command:`execute_process` command learned to support specifying
the same file for ``OUTPUT_FILE`` and ``ERROR_FILE``.
* The :command:`file(GLOB)` and :command:`file(GLOB_RECURSE)` commands
learned a new ``LIST_DIRECTORIES <bool>`` option to specify whether
the glob result should include directories.
* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
commands now search in installation prefixes derived from the ``PATH``
environment variable.
* The :command:`if` command learned a new ``IN_LIST`` operator that
evaluates to true if a given element is contained in a named list.
* The :command:`install(EXPORT)` and :command:`export()` commands
learned to export targets that populate the :prop_tgt:`INTERFACE_SOURCES`
target property.
* The :command:`install(TARGETS)` command learned to support
generator expressions in the ``DESTINATION`` value.
Variables
---------
* The version of some Fortran compilers is now detected and stored in the
:variable:`CMAKE_Fortran_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>`
variable.
* The :ref:`Visual Studio Generators` learned a new
:variable:`CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD` option
to put the ``INSTALL`` target in the default build of a
solution (``.sln``) file.
Properties
----------
* A :prop_tgt:`CROSSCOMPILING_EMULATOR` target property and supporting
:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable were introduced
to allow target platform binaries to run on the host during cross
compiling.
* A :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` target property and supporting
:variable:`CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE` variable were introduced
to tell the :ref:`Makefile Generators` and the :generator:`Ninja` generator
to run ``include-what-you-use`` along with the compiler for ``C`` and
``CXX`` languages.
* The :prop_tgt:`<LANG>_VISIBILITY_PRESET` and
:prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties now
affect compilation in sources of all target types. See
policy :policy:`CMP0063`.
* The :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property learned
to support generator expressions.
Modules
-------
* The :module:`CheckFortranCompilerFlag` module was introduced
to check ``Fortran`` compiler flags, much like the
:module:`CheckCCompilerFlag` module already does for ``C``.
* The :module:`ExternalData` module learned a new
:variable:`ExternalData_NO_SYMLINKS` option to disable use of
symbolic links to populate the real data files and use copies
instead.
* The :module:`ExternalData` module learned a new ``RECURSE:``
option in ``DATA{}`` references specifying directories.
This allows an entire directory tree of associated files
to be matched.
* The :module:`ExternalData` module learned a new URL template
placeholder ``%(algo:<key>)`` to allow custom mapping from
algorithm name to URL component through configuration of new
:variable:`ExternalData_URL_ALGO_<algo>_<key>` variables.
This allows more flexibility in remote URLs.
* The :module:`ExternalProject` module learned to replace tokens
like ``<BINARY_DIR>`` in the ``BYPRODUCTS`` of each step.
* The :module:`ExternalProject` module APIs learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`
when using ``LOG_*`` options and in CMake initial cache options.
* The :module:`FindBoost` module now tracks the directories containing
libraries separately for RELEASE and DEBUG configurations.
* The :module:`FindCUDA` module now defaults to using the static
CUDA runtime library if it is available. A new
``CUDA_USE_STATIC_CUDA_RUNTIME`` option is offered to control
this behavior.
* The :module:`FindMatlab` module was completely rewritten. It learned
about versions and components and to find Matlab in a more precise and
multiplatform way. The module now offers APIs to create mex extensions,
documentation, and unit tests.
* The :module:`FindPackageHandleStandardArgs` module
``FIND_PACKAGE_HANDLE_STANDARD_ARGS`` function now
always populates both the ``<PackageName>_FOUND``
and ``<UPPERCASE_NAME>_FOUND`` variables (the latter
for backwards compatibility). The ``FOUND_VAR``
option is now ignored except to enforce its allowed
values.
* The :module:`InstallRequiredSystemLibraries` module learned a new
``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT`` option to specify the
installation component.
Generator Expressions
---------------------
* A new ``COMPILE_LANGUAGE`` generator expression was introduced to
allow specification of compile options for target files based on the
:prop_sf:`LANGUAGE` of each source file. Due to limitations of the
underlying native build tools, this feature has varying support across
generators. See the :manual:`cmake-generator-expressions(7)` manual
for details.
CTest
-----
* The :manual:`ctest(1)` tool learned a new ``--repeat-until-fail <n>``
option to help find sporadic test failures.
* The :module:`CTestCoverageCollectGCOV` module learned to support
the same ``CTEST_CUSTOM_COVERAGE_EXCLUDE`` option as the
:command:`ctest_coverage` command.
CPack
-----
* The :cpack_gen:`CPack IFW Generator` learned to support
Qt Framework Installer 2.0 tools.
* The :cpack_gen:`CPack DEB Generator` learned a new
:variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
variable to specify per-component use of ``dpkg-shlibdeps``.
* The :cpack_gen:`CPack DEB Generator` learned a new
:variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS`
option to specify per-component dependencies.
* The :cpack_gen:`CPack RPM Generator` learned to package symbolic links
more cleanly and now supports directory symlinks with recent
``rpmbuild`` versions.
* The :cpack_gen:`CPack RPM Generator` learned a new
:variable:`CPACK_RPM_ADDITIONAL_MAN_DIRS` variable to specify
directories containing man pages for the brp-compress RPM macro.
* The :cpack_gen:`CPack RPM Generator` learned a new
:variable:`CPACK_RPM_<component>_PACKAGE_ARCHITECTURE` variable
to specify a component-specific package architecture.
* The CPack WIX generator learned the new
:prop_inst:`CPACK_START_MENU_SHORTCUTS`,
:prop_inst:`CPACK_DESKTOP_SHORTCUTS` and
:prop_inst:`CPACK_STARTUP_SHORTCUTS` installed file properties which can
be used to install shorcuts in the Start Menu, on the Desktop and
in the Startup Folder respectively.
Other
-----
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by GNU compilers on Windows, versions
4.4 through 5.0.
* The :manual:`cmake(1)` ``-E tar`` command learned a new
``--format<format>`` option to specify the archive format to
be written.
* On OS X, CMake learned to create XCTest bundles to test Frameworks
and App Bundles within Xcode. The :module:`FindXCTest` module
provides convenience functions to handle :prop_tgt:`XCTEST` bundles.
Deprecated and Removed Features
===============================
* On OS X the :manual:`cmake-gui(1)` no longer has the
``Install For Command Line Use`` menu item. Instead there
is a ``How to Install For Command Line Use`` menu item
that shows an informational dialog box explaining how to
make the command line tools available. For example::
/Applications/CMake.app/Contents/bin/cmake-gui --install
* The :command:`ctest_build` and :command:`build_command` commands
no longer tell ``make`` tools to ignore errors with the ``-i`` option.
Previously this was done for :ref:`Makefile Generators` but not others.
See policy :policy:`CMP0061`.
* The :generator:`Visual Studio 10 2010` generator no longer checks
for running VS IDEs with the project open or asks them to reload.
This was originally done for VS 10 because it had been done for
VS 7 through 9 to avoid prompting for every project in a solution.
Since VS >= 10 allow the whole solution to reload at once they
do not need CMake to help them.
* The :generator:`Visual Studio 7` generator (.NET 2002) is now
deprecated and will be removed in a future version of CMake.
* The :generator:`Visual Studio 6` generator is now deprecated
and will be removed in a future version of CMake.
* The :command:`find_package` command no longer considers project
build trees recently configured in a :manual:`cmake-gui(1)`.
This was previously done only on Windows and is now never done.
The ``NO_CMAKE_BUILDS_PATH`` option is now ignored if given
and effectively always on.
Projects may populate the :ref:`User Package Registry` to aid
users building multiple dependent projects one after another.
* The :command:`add_definitions()` command no longer causes a
:prop_dir:`DEFINITIONS` directory property to be populated. See policy
:policy:`CMP0059`.
* With Visual Studio 7, 8, and 9 generators the value of the ``$(OutDir)``
placeholder no longer evaluates to the configuration name. Projects
should use ``$(ConfigurationName)`` for that instead.
* Using the output of :command:`export()` with the :command:`install(FILES)`
command is no longer allowed. See policy :policy:`CMP0062` for details.
Other Changes
=============
* The :generator:`Ninja` generator now requires that calls to the
:command:`add_custom_command` and :command:`add_custom_target`
commands use the ``BYPRODUCTS`` option to explicitly specify any
files generated by the custom commands that are not listed as
outputs (perhaps because their timestamps are allowed to be older
than the inputs). See policy :policy:`CMP0058`.
* Build-time progress output of :ref:`Makefile Generators` has been improved.
It no longer mixes progress and build rule messages during parallel builds.
The link rule messages now have progress and are displayed as bold green
instead of bold red (since red is often associated with an error message).
* The :variable:`CMAKE_CFG_INTDIR` variable value for Visual Studio
7, 8, and 9 is now ``$(ConfigurationName)`` instead of ``$(OutDir)``.
This should have no effect on the intended use cases of the variable.
* Linking to library files by a full path in an implicit linker search
directory (e.g. ``/usr/lib/libfoo.a``) no longer asks the linker to
search for the library (e.g. ``-lfoo``) and now links by full path.
See policy :policy:`CMP0060`.

View file

@ -0,0 +1,273 @@
CMake 3.4 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.3 include the following.
New Features
============
Generators
----------
* The :generator:`Visual Studio 14 2015` generator learned to select
a Windows 10 SDK based on the value of the :variable:`CMAKE_SYSTEM_VERSION`
variable and the SDKs available on the host.
* CMake learned rudimentary support for the Apple Swift language. When using
the :generator:`Xcode` generator with Xcode 6.1 or higher, one may enable
the ``Swift`` language with the :command:`enable_language` command or the
:command:`project` command (this is an error with other generators or when
Xcode is too old). Then one may list ``.swift`` source files in targets
for compilation.
Commands
--------
* The :command:`find_program` command learned a ``NAMES_PER_DIR``
option to consider all given ``NAMES`` in each directory before
moving on to the next directory.
* The :command:`get_filename_component` command learned a new ``BASE_DIR``
subcommand. This is used to specify a base directory when calculating an
absolute path from a relative path.
* The :command:`if` command learned a new ``TEST`` operator that evaluates
to true if a given test name has been defined by the :command:`add_test`
command. See policy :policy:`CMP0064`.
* The :command:`install(DIRECTORY)` command ``DESTINATION`` option learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`install(FILES)` command ``DESTINATION`` option learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`string` command learned a new ``APPEND`` subcommand.
Variables
---------
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator
learned to add compiler launcher tools like distcc and ccache along
with the compiler for ``C`` and ``CXX`` languages. See the
:variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* New :variable:`CMAKE_LINK_SEARCH_START_STATIC` and
:variable:`CMAKE_LINK_SEARCH_END_STATIC` variables were
introduced to initialize the
:prop_tgt:`LINK_SEARCH_START_STATIC` and
:prop_tgt:`LINK_SEARCH_END_STATIC` target properties,
respectively.
Properties
----------
* :ref:`Visual Studio Generators` learned to support additional
target properties to customize projects for NVIDIA Nsight
Tegra Visual Studio Edition:
* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS`
* :prop_tgt:`ANDROID_ARCH`
* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES`
* :prop_tgt:`ANDROID_JAR_DEPENDENCIES`
* :prop_tgt:`ANDROID_JAR_DIRECTORIES`
* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR`
* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES`
* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES`
* :prop_tgt:`ANDROID_PROCESS_MAX`
* :prop_tgt:`ANDROID_PROGUARD`
* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH`
* :prop_tgt:`ANDROID_SECURE_PROPS_PATH`
* :prop_tgt:`ANDROID_SKIP_ANT_STEP`
* :prop_tgt:`ANDROID_STL_TYPE`
* The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`,
:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`, and
:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target properties learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`SOURCE_DIR` and :prop_tgt:`BINARY_DIR` target properties
were introduced to allow project code to query where a target is defined.
* The :prop_tgt:`OUTPUT_NAME` target property and its variants learned to
support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* A :prop_gbl:`TARGET_MESSAGES` global property was added to tell the
:ref:`Makefile Generators` whether to generate commands to print output
after each target is completed.
* On Windows with MS-compatible tools, CMake learned to optionally
generate a module definition (``.def``) file for ``SHARED`` libraries.
See the :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property.
Modules
-------
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
function ``GIT_SUBMODULES`` option now also limits the set of
submodules that are initialized in addition to the prior behavior
of limiting the set of submodules that are updated.
* The :module:`ExternalProject` module learned new ``USES_TERMINAL``
arguments for giving steps exclusive terminal access. This is
useful with the :generator:`Ninja` generator to monitor CMake
superbuild progress and prevent CPU oversubscription.
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a
new ``DEFINES_FILE`` option to specify a custom output header
to be generated.
* The :module:`FindHDF5` module learend a new ``HDF5_PREFER_PARALLEL``
option allowing users to specify that a parallel HDF5 tool is
preferred if both are available.
* The :module:`FindIce` module now provides imported targets.
* The :module:`FindJava` module learned to optionally find
the ``idlj`` and ``jarsigner`` tools.
* The :module:`FindOpenSSL` module now provides imported targets.
* The :module:`FindOpenSSL` module learned a new ``OPENSSL_USE_STATIC_LIBS``
option to search only for static libraries.
* The :module:`FindPkgConfig` learned a new :command:`pkg_get_variable`
command which may be used to query for arbitrary variables from a package
(such as for related tools or data and plugin install paths).
* The :module:`FindProtobuf` module gained a new
:command:`protobuf_generate_python` function to generate python
sources from ``.proto`` files.
* The :module:`FindTIFF` module learned to search separately for
debug and release variants.
* The :module:`FindwxWidgets` module learned to support version requests.
* The :module:`FindXercesC` module learned to search separately for
debug and release variants.
* The :module:`FindZLIB` module learned to search separately for
debug and release variants.
* The :module:`GNUInstallDirs` module learned special default values
for certain installation prefixes according to the `GNU Coding
Standards`_ and the `Filesystem Hierarchy Standard`_.
* The :module:`UseJava` module ``add_jar`` function learned
to support response files (e.g. ``@srcs.txt``) for source
specification.
* The :module:`UseJava` module ``install_jar`` function learned
new ``DESTINATION`` and ``COMPONENT`` options to specify
the corresponding :command:`install` command options.
* The :module:`UseJava` module gained a new ``create_javah``
function to create C headers from Java classes.
.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
Generator Expressions
---------------------
* A new ``$<SHELL_PATH:...>``
:manual:`generator expression <cmake-generator-expressions(7)>`
has been added.
CTest
-----
* CTest learned to optionally measure the CPU load during parallel
testing and avoid starting tests that may cause the load to exceed
a given threshold. See the :manual:`ctest(1)` command ``--test-load``
option, the ``TestLoad`` setting of the :ref:`CTest Test Step`,
the :variable:`CTEST_TEST_LOAD` variable, and the ``TEST_LOAD``
option of the :command:`ctest_test` command.
* :manual:`ctest(1)` learned options
``--test-output-size-passed`` and ``--test-output-size-failed``
to customize the limit on test output size submitted when
running as a :ref:`Dashboard Client`.
CPack
-----
* The :cpack_gen:`CPack DEB Generator` learned to set package dependencies
per component. See variables:
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES`
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS`
* The :module:`CPack` module learned to package empty directories.
* The :module:`CPack` module gained a new setting, ``CPACK_VERBATIM_VARIABLES``,
which can be used to ensure the cpack program receives the settings' values
exactly as they were set, even if they contain CMake-special characters.
For compatibility, it's off by default.
Other
-----
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by GNU C compilers on Windows.
* CMake learned to honor ``*.manifest`` source files with MSVC tools.
Manifest files named as sources of ``.exe`` and ``.dll`` targets
will be merged with linker-generated manifests and embedded in the
binary.
* The `Concurrent Fortran 77 <https://ccur.com>`__ compiler is now supported.
Its :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` is ``CCur``.
* :manual:`cmake(1)` gained a new ``--trace-expand`` command line option
that is like ``--trace`` but expands variable references in the output.
Deprecated and Removed Features
===============================
* The :module:`CMakeExpandImportedTargets` module is now documented
as deprecated. See module documentation for an explanation.
* The :variable:`CMAKE_USE_RELATIVE_PATHS` variable no longer has any
effect. Previously it was partially implemented and unreliable.
Other Changes
=============
* The :module:`CheckFunctionExists`, :module:`CheckLibraryExists`,
:module:`CheckSymbolExists`, and :module:`FindThreads` modules learned to
work in environments where only CXX is enabled.
* The :cpack_gen:`CPack DEB Generator` now correctly excludes symlinks
during package checksum calculation.
* The :cpack_gen:`CPack DEB Generator` no longer uses fakeroot and
system tar program for packaging.
* The :module:`CPack` module no longer mangles settings with CMake-special
characters when they're used as defaults for other settings. The macro
``cpack_set_if_not_set``, which was responsible for this, is now deprecated.
* CMake no longer links executables with flags to export symbols
unless the :prop_tgt:`ENABLE_EXPORTS` target property is set.
See policy :policy:`CMP0065`.
* The ``SONAME`` field is no longer set for ``MODULE`` libraries
created with the :command:`add_library` command. ``MODULE``
libraries are meant for explicit dynamic loading at runtime.
They cannot be linked so ``SONAME`` is not useful.
* The internal :variable:`CMAKE_<LANG>_COMPILE_OBJECT` rule variable now
substitutes compiler include flags in a separate ``<INCLUDES>`` placeholder
instead of the main ``<FLAGS>`` placeholder.

View file

@ -0,0 +1,187 @@
CMake 3.5 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.4 include the following.
New Features
============
GUI
---
* The :manual:`cmake-gui(1)` gained options to control warnings about
deprecated functionality.
* The :manual:`cmake-gui(1)` learned an option to set the toolset
to be used with VS IDE and Xcode generators, much like the
existing ``-T`` option to :manual:`cmake(1)`.
* The :manual:`cmake-gui(1)` gained a Regular Expression Explorer which
may be used to create and evaluate regular expressions in real-time.
The explorer window is available via the ``Tools`` menu.
Command-Line
------------
* The ``-Wdev`` and ``-Wno-dev`` :manual:`cmake(1)` options now also enable
and suppress the deprecated warnings output by default.
* The suppression of developer warnings as errors can now be controlled with
the new ``-Werror=dev`` and ``-Wno-error=dev`` :manual:`cmake(1)` options.
* The :manual:`cmake(1)` ``-E`` command-line tools ``copy``,
``copy_if_different``, ``copy_directory``, and ``make_directory``
learned to support multiple input files or directories.
Commands
--------
* The :command:`cmake_parse_arguments` command is now implemented natively.
The :module:`CMakeParseArguments` module remains as an empty placeholder
for compatibility.
* The :command:`install(DIRECTORY)` command learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`
in the list of directories.
Variables
---------
* The :variable:`CMAKE_ERROR_DEPRECATED` variable can now be set using the
``-Werror=deprecated`` and ``-Wno-error=deprecated`` :manual:`cmake(1)`
options.
* The :variable:`CMAKE_WARN_DEPRECATED` variable can now be set using the
``-Wdeprecated`` and ``-Wno-deprecated`` :manual:`cmake(1)` options.
Properties
----------
* The :prop_tgt:`VS_GLOBAL_<variable>` target property is now implemented
for VS 2010 and above. Previously it worked only in VS 2008 and below.
Modules
-------
* The :module:`ExternalProject` module learned a new ``GIT_REMOTE_NAME``
option to control the ``git clone --origin`` value.
* The :module:`FindBoost` module now provides imported targets
such as ``Boost::boost`` and ``Boost::filesystem``.
* The :module:`FindFLEX` module ``FLEX_TARGET`` macro learned a
new ``DEFINES_FILE`` option to specify a custom output header
to be generated.
* The :module:`FindGTest` module now provides imported targets.
* The :module:`FindGTK2` module, when ``GTK2_USE_IMPORTED_TARGETS`` is
enabled, now sets ``GTK2_LIBRARIES`` to contain the list of imported
targets instead of the paths to the libraries. Moreover it now sets
a new ``GTK2_TARGETS`` variable containing all the targets imported.
* The :module:`FindOpenMP` module learned to support Clang.
* The :module:`FindOpenSSL` module gained a new
``OPENSSL_MSVC_STATIC_RT`` option to search for libraries using
the MSVC static runtime.
* The :module:`FindPNG` module now provides imported targets.
* The :module:`FindTIFF` module now provides imported targets.
* A :module:`FindXalanC` module was introduced to find the
Apache Xalan-C++ XSL transform processing library.
* The :module:`FindXercesC` module now provides imported targets.
Platforms
---------
* Support was added for the ARM Compiler (arm.com) with compiler id ``ARMCC``.
* A new platform file for cross-compiling in the Cray Linux Environment to
target compute nodes was added. See
:ref:`Cross Compiling for the Cray Linux Environment <Cray Cross-Compile>`
for usage details.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by Clang compilers on Windows (MinGW).
* When building for embedded Apple platforms like iOS CMake learned to build and
install combined targets which contain both a device and a simulator build.
This behavior can be enabled by setting the :prop_tgt:`IOS_INSTALL_COMBINED`
target property.
CPack
-----
* The :cpack_gen:`CPack DragNDrop Generator` learned new variable to
specify AppleScript file run to customize appearance of ``DragNDrop``
installer folder, including background image setting using supplied
PNG or multi-resolution TIFF file.
See the :variable:`CPACK_DMG_DS_STORE_SETUP_SCRIPT` and
:variable:`CPACK_DMG_BACKGROUND_IMAGE` variables.
* The :cpack_gen:`CPack DEB Generator` learned to set the optional config
file ``Source`` field using a monolithic or per-component variable.
See :variable:`CPACK_DEBIAN_PACKAGE_SOURCE`.
* The :cpack_gen:`CPack DEB Generator` learned to set Package, Section
and Priority control fields per-component.
See variables :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION` and
:variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY`.
* The :cpack_gen:`CPack DragNDrop Generator` learned to add
multi-lingual SLAs to a DMG which is presented to the user when they try to
mount the DMG. See the :variable:`CPACK_DMG_SLA_LANGUAGES` and
:variable:`CPACK_DMG_SLA_DIR` variables for details.
* The :cpack_gen:`CPack NSIS Generator` learned new variables to
add bitmaps to the installer.
See the :variable:`CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP`
and :variable:`CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP` variables.
* The :cpack_gen:`CPack RPM Generator` learned to set Name and Group
control fields per-component.
See :variable:`CPACK_RPM_<component>_PACKAGE_NAME`
and :variable:`CPACK_RPM_<component>_PACKAGE_GROUP`.
Other
-----
* Warnings about deprecated functionality are now enabled by default.
They may be suppressed with ``-Wno-deprecated`` or by setting the
:variable:`CMAKE_WARN_DEPRECATED` variable to false.
Deprecated and Removed Features
===============================
* The :manual:`cmake(1)` ``-E time`` command now properly passes arguments
with spaces or special characters through to the child process. This
may break scripts that worked around the bug with their own extra
quoting or escaping.
* The :generator:`Xcode` generator was fixed to escape backslashes in
strings consistently with other generators. Projects that previously
worked around the inconsistecy with an extra level of backslashes
conditioned on the Xcode generator must be updated to remove the
workaround for CMake 3.5 and greater.
Other Changes
=============
* The :generator:`Visual Studio 14 2015` generator learned to map the
``/debug:fastlink`` linker flag to the ``.vcxproj`` file property.
* The :module:`FindGTK2` module now configures the ``GTK2::sigc++`` imported
target to enable c++11 on its dependents when using sigc++ 2.5.1 or higher.
* The precompiled Windows binary provided on ``cmake.org`` is now a
``.msi`` package instead of an installer executable. One may need
to manually uninstall CMake versions lower than 3.5 before installing
the new package.

View file

@ -0,0 +1,318 @@
CMake 3.6 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.5 include the following.
New Features
============
Generators
----------
* The :generator:`Ninja` generator learned to produce phony targets
of the form ``sub/dir/all`` to drive the build of a subdirectory.
This is equivalent to ``cd sub/dir; make all`` with
:ref:`Makefile Generators`.
* The :generator:`Ninja` generator now includes system header files in build
dependencies to ensure correct re-builds when system packages are updated.
* The :generator:`Visual Studio 14 2015` generator learned to support the
Clang/C2 toolsets, e.g. with the ``-T v140_clang_3_7`` option.
This feature is experimental.
Commands
--------
* The :command:`add_custom_command` and :command:`add_custom_target` commands
learned how to use the :prop_tgt:`CROSSCOMPILING_EMULATOR` executable
target property.
* The :command:`install` command learned a new ``EXCLUDE_FROM_ALL`` option
to leave installation rules out of the default installation.
* The :command:`list` command gained a ``FILTER`` sub-command to filter
list elements by regular expression.
* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)`
commands gained support for the ``%s`` placeholder. This is
the number of seconds since the UNIX Epoch.
Variables
---------
* A :variable:`CMAKE_DEPENDS_IN_PROJECT_ONLY` variable was introduced
to tell :ref:`Makefile Generators` to limit dependency scanning only
to files in the project source and build trees.
* A new :variable:`CMAKE_HOST_SOLARIS` variable was introduced to
indicate when CMake is running on an Oracle Solaris host.
* A :variable:`CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES` variable was
added for use by toolchain files to specify system include directories
to be appended to all compiler command lines.
* The :variable:`CMAKE_<LANG>_STANDARD_LIBRARIES` variable is now documented.
It is intended for use by toolchain files to specify system libraries to be
added to all linker command lines.
* A :variable:`CMAKE_NINJA_OUTPUT_PATH_PREFIX` variable was introduced
to tell the :generator:`Ninja` generator to configure the generated
``build.ninja`` file for use as a ``subninja``.
* A :variable:`CMAKE_TRY_COMPILE_PLATFORM_VARIABLES` variable was
added for use by toolchain files to specify platform-specific
variables that must be propagated by the :command:`try_compile`
command into test projects.
* A :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable was added
to optionally tell the :command:`try_compile` command to build
a static library instead of an executable. This is useful for
cross-compiling toolchains that cannot link binaries without
custom flags or scripts.
Properties
----------
* A :prop_tgt:`DEPLOYMENT_REMOTE_DIRECTORY` target property was introduced
to tell the :generator:`Visual Studio 9 2008` and
:generator:`Visual Studio 8 2005` generators to generate the "remote
directory" for WinCE project deployment and debugger settings.
* A :prop_tgt:`<LANG>_CLANG_TIDY` target property and supporting
:variable:`CMAKE_<LANG>_CLANG_TIDY` variable were introduced to tell the
:ref:`Makefile Generators` and the :generator:`Ninja` generator to run
``clang-tidy`` along with the compiler for ``C`` and ``CXX`` languages.
* A :prop_test:`TIMEOUT_AFTER_MATCH` test property was introduced to
optionally tell CTest to enforce a secondary timeout after matching
certain output from a test.
* A :prop_tgt:`VS_CONFIGURATION_TYPE` target property was introduced
to specify a custom project file type for :ref:`Visual Studio Generators`
supporting VS 2010 and above.
* A :prop_dir:`VS_STARTUP_PROJECT` directory property was introduced
to specify for :ref:`Visual Studio Generators` the default startup
project for generated solutions (``.sln`` files).
Modules
-------
* The :module:`CMakePushCheckState` module now pushes/pops/resets the variable
``CMAKE_EXTRA_INCLUDE_FILE`` used in :module:`CheckTypeSize`.
* The :module:`ExternalProject` module leared the ``GIT_SHALLOW 1``
option to perform a shallow clone of a Git repository.
* The :module:`ExternalProject` module learned to initialize Git submodules
recursively and also to initialize new submodules on updates. Use the
``GIT_SUBMODULES`` option to restrict which submodules are initialized and
updated.
* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``
argument to skip extracting the file that is downloaded (e.g., for
self-extracting shell installers or ``.msi`` files).
* The :module:`ExternalProject` module now uses ``TLS_VERIFY`` when fetching
from git repositories.
* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to
support `OpenBLAS <http://www.openblas.net>`__.
* The :module:`FindCUDA` module learned to find the ``cublas_device`` library.
* The :module:`FindGTest` module ``gtest_add_tests`` function now causes
CMake to automatically re-run when test sources change so that they
can be re-scanned.
* The :module:`FindLTTngUST` module was introduced to find the LTTng-UST
library.
* The :module:`FindPkgConfig` module learned to optionally create imported
targets for the libraries it has found.
* The :module:`FindProtobuf` module learned to provide a ``Protobuf_VERSION``
variable and check the version number requested in a :command:`find_package`
call.
* The :module:`InstallRequiredSystemLibraries` module learned a new
``CMAKE_INSTALL_UCRT_LIBRARIES`` option to enable app-local deployment
of the Windows Universal CRT libraries with Visual Studio 2015.
Platforms
---------
* The Clang compiler is now supported on CYGWIN.
* Support was added for the Bruce C Compiler with compiler id ``Bruce``.
CTest
-----
* The :command:`ctest_update` command now looks at the
:variable:`CTEST_GIT_INIT_SUBMODULES` variable to determine whether
submodules should be updated or not before updating.
* The :command:`ctest_update` command will now synchronize submodules on an
update. Updates which add submodules or change a submodule's URL will now be
pulled properly.
CPack
-----
* The :cpack_gen:`CPack DEB Generator` learned how to handle ``$ORIGIN``
in ``CMAKE_INSTALL_RPATH`` when :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS`
is used for dependency auto detection.
* The :cpack_gen:`CPack DEB Generator` learned how to generate
``DEBIAN/shlibs`` contorl file when package contains shared libraries.
* The :cpack_gen:`CPack DEB Generator` learned how to generate
``DEBIAN/postinst`` and ``DEBIAN/postrm`` files if the package installs
libraries in ldconfig-controlled locations (e.g. ``/lib/``, ``/usr/lib/``).
* The :cpack_gen:`CPack DEB Generator` learned how to generate dependencies
between Debian packages if multi-component setup is used and
:variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables are set.
For backward compatibility this feature is disabled by default.
See :variable:`CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS`.
* The :cpack_gen:`CPack DEB Generator` learned how to set custom package
file names including how to generate properly-named Debian packages::
<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
For backward compatibility this feature is disabled by default. See
:variable:`CPACK_DEBIAN_FILE_NAME` and
:variable:`CPACK_DEBIAN_<COMPONENT>_FILE_NAME`.
* The :cpack_gen:`CPack DEB Generator` learned how to set the package
release number (``DebianRevisionNumber`` in package file name when
used in combination with ``DEB-DEFAULT`` value set by
:variable:`CPACK_DEBIAN_FILE_NAME`).
See :variable:`CPACK_DEBIAN_PACKAGE_RELEASE`.
* The :cpack_gen:`CPack DEB Generator` learned how to set the package
architecture per-component.
See :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE`.
* The :cpack_gen:`CPack DragNDrop Generator` learned a new option to skip the
``/Applications`` symlink.
See the :variable:`CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK` variable.
* The :module:`CPackIFW` module gained a new
:command:`cpack_ifw_update_repository` command to update a QtIFW-specific
repository from a remote repository.
* The :cpack_gen:`CPack RPM Generator` learned how to set RPM ``dist`` tag
as part of RPM ``Release:`` tag when enabled (mandatory on some Linux
distributions for e.g. on Fedora).
See :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`.
* The :cpack_gen:`CPack RPM Generator` learned how to set default values
for owning user/group and file/directory permissions of package content.
See :variable:`CPACK_RPM_DEFAULT_USER`, :variable:`CPACK_RPM_DEFAULT_GROUP`,
:variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`,
:variable:`CPACK_RPM_DEFAULT_DIR_PERMISSIONS` and their per component
counterparts.
* The :cpack_gen:`CPack RPM Generator` learned how to set user defined
package file names, how to specify that rpmbuild should decide on file
name format as well as handling of multiple rpm packages generated by a
single user defined spec file.
See :variable:`CPACK_RPM_PACKAGE_NAME` and
:variable:`CPACK_RPM_<component>_PACKAGE_NAME`.
* The :cpack_gen:`CPack RPM Generator` learned how to correctly handle symlinks
that are pointing outside generated packages.
Other
-----
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by Intel C++ compilers versions 12.1
through 16.0 on UNIX platforms.
Deprecated and Removed Features
===============================
* The :module:`CMakeForceCompiler` module and its macros are now deprecated.
See module documentation for an explanation.
* The :command:`find_library`, :command:`find_path`, and :command:`find_file`
commands no longer search in installation prefixes derived from the ``PATH``
environment variable on non-Windows platforms. This behavior was added in
CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts.
Users that keep some ``<prefix>/bin`` directories in the ``PATH`` just for
their tools do not necessarily want any supporting ``<prefix>/lib``
directories searched. One may set the ``CMAKE_PREFIX_PATH`` environment
variable with a :ref:`semicolon-separated list <CMake Language Lists>` of prefixes that are
to be searched.
* The :generator:`Visual Studio 7 .NET 2003` generator is now
deprecated and will be removed in a future version of CMake.
* The :generator:`Visual Studio 7` generator (for VS .NET 2002) has been
removed. It had been deprecated since CMake 3.3.
* The :generator:`Visual Studio 6` generator has been removed.
It had been deprecated since CMake 3.3.
Other Changes
=============
* The precompiled OS X binary provided on ``cmake.org`` now requires
OS X 10.7 or newer.
* On Linux and FreeBSD platforms, when building CMake itself from source and
not using a system-provided libcurl, OpenSSL is now used by default if it is
found on the system. This enables SSL/TLS support for commands supporting
network communication via ``https``, such as :command:`file(DOWNLOAD)`,
:command:`file(UPLOAD)`, and :command:`ctest_submit`.
* The :manual:`cmake(1)` ``--build`` command-line tool now rejects multiple
``--target`` options with an error instead of silently ignoring all but the
last one.
* :prop_tgt:`AUTOMOC` now diagnoses name collisions when multiple source
files in different directories use ``#include <moc_foo.cpp>`` with the
same name (because the generated ``moc_foo.cpp`` files would collide).
* The :module:`FindBISON` module ``BISON_TARGET`` macro now supports
special characters by passing the ``VERBATIM`` option to internal
:command:`add_custom_command` calls. This may break clients that
added escaping manually to work around the bug.
* The :module:`FindFLEX` module ``FLEX_TARGET`` macro now supports
special characters by passing the ``VERBATIM`` option to internal
:command:`add_custom_command` calls. This may break clients that
added escaping manually to work around the bug.
* The :module:`FindProtobuf` module input and output variables were all renamed
from ``PROTOBUF_`` to ``Protobuf_`` for consistency with other find modules.
Input variables of the old case will be honored if provided, and output
variables of the old case are always provided.
* The :cpack_gen:`CPack RPM Generator` now supports upper cased component
names in per component CPackRPM specific variables.
E.g. component named ``foo`` now expects component specific
variable to be ``CPACK_RPM_FOO_PACKAGE_NAME`` while before
it expected ``CPACK_RPM_foo_PACKAGE_NAME``.
Upper cased component name part in variables is compatible
with convention used for other CPack variables.
For back compatibility old format of variables is still valid
and preferred if both versions of variable are set, but the
preferred future use is upper cased component names in variables.
New variables that will be added to CPackRPM in later versions
will only support upper cased component variable format.
* The CPack NSIS generator's configuration file template was fixed to
quote the path to the uninstaller tool used by the
:variable:`CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL` option.
This avoids depending on an insecure Windows feature to run an
uninstaller tool with a space in the path.

View file

@ -0,0 +1,319 @@
CMake 3.7 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.6 include the following.
New Features
============
Platforms
---------
* CMake now supports :ref:`Cross Compiling for Android` with simple
toolchain files.
* The Clang compiler is now supported on AIX.
Generators
----------
* The :generator:`Ninja` generator learned to conditionally support
Fortran when using a ``ninja`` tool that has the necessary features.
See generator documentation for details.
* The :generator:`Ninja` generator learned to produce phony targets
of the form ``sub/dir/{test,install,package}`` to drive the build
of a subdirectory installation, test or packaging target.
This is equivalent to ``cd sub/dir; make {test,install,package}``
with :ref:`Makefile Generators`.
* The :generator:`Visual Studio 15 2017` generator was added. This is
experimental and based on "Visual Studio 2017 RC" because this version
of VS has not been released.
* :ref:`Visual Studio Generators` for VS 2010 and above learned to
place ``.natvis`` source files into VS project files properly.
* The :generator:`Xcode` generator's rudimentary Swift language support
learned to honor a new :variable:`CMAKE_Swift_LANGUAGE_VERSION` variable
to tell Xcode what version of Swift is used by the source.
* The :generator:`CodeLite` generator gained a new
:variable:`CMAKE_CODELITE_USE_TARGETS` option
to change project creation from projects to targets.
Commands
--------
* The :command:`add_custom_command` command gained a new ``DEPFILE``
option that works with the :generator:`Ninja` generator to provide
implicit dependency information to the build tool.
* The :command:`cmake_parse_arguments` command gained a new ``PARSE_ARGV``
mode to read arguments directly from ``ARGC`` and ``ARGV#``
variables inside a :command:`function` body.
* The :command:`export` command gained an ``ANDROID_MK`` option
to generate ``Android.mk`` files referencing CMake-built
libraries as prebuilts for the Android NDK build system.
* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands gained
``HTTPHEADER <HTTP-header>`` and ``USERPWD <username>:<password>`` options.
* The :command:`find_library` and :command:`find_package` commands learned
to search in ``lib32/`` directories when the build targets a 32-bit
architecture. See the :prop_gbl:`FIND_LIBRARY_USE_LIB32_PATHS` global
property.
* The :command:`find_package` command gained the possibility of
sorting compatible libraries by ``NAME`` or by ``NATURAL`` sorting by
setting the two new variables :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`
and :variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION`.
* The :command:`if` command gained new boolean comparison operations
``LESS_EQUAL``, ``GREATER_EQUAL``, ``STRLESS_EQUAL``, ``STRGREATER_EQUAL``,
``VERSION_LESS_EQUAL``, and ``VERSION_GREATER_EQUAL``.
* The :command:`install` command gained an ``EXPORT_ANDROID_MK``
subcommand to install ``Android.mk`` files referencing installed
libraries as prebuilts for the Android NDK build system.
* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)`
commands gained support for the ``%a`` and ``%b`` placeholders.
These are the abbreviated weekday and month names.
* The :command:`try_compile` command source file signature now honors
configuration-specific flags (e.g. :variable:`CMAKE_<LANG>_FLAGS_DEBUG`)
in the generated test project. Previously only the default such flags
for the current toolchain were used. See policy :policy:`CMP0066`.
Variables
---------
* Variable :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` was added to control
the sorting mode of the :command:`find_package` command.
* Variable :variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION` was added to control
the sorting direction the :command:`find_package` command.
* :variable:`Toolchain files <CMAKE_TOOLCHAIN_FILE>` may now set a
:variable:`CMAKE_<LANG>_FLAGS_INIT` variable to initialize the
:variable:`CMAKE_<LANG>_FLAGS` cache entry the first time a language is
enabled in a build tree.
* :variable:`Toolchain files <CMAKE_TOOLCHAIN_FILE>` may now set
:variable:`CMAKE_EXE_LINKER_FLAGS_INIT`,
:variable:`CMAKE_SHARED_LINKER_FLAGS_INIT`, and
:variable:`CMAKE_MODULE_LINKER_FLAGS_INIT` variables to initialize the
:variable:`CMAKE_EXE_LINKER_FLAGS`,
:variable:`CMAKE_SHARED_LINKER_FLAGS`, and
:variable:`CMAKE_MODULE_LINKER_FLAGS` cache entries the first time
a language is enabled in a build tree.
Properties
----------
* On Apple platforms the :prop_tgt:`BUNDLE_EXTENSION` target property
now also applies to Frameworks and App Bundles.
* A :prop_dir:`BINARY_DIR` directory property was added to get the
absolute path to the binary directory corresponding to the source
directory on which the property is read.
* A :prop_dir:`BUILDSYSTEM_TARGETS` directory property was added to
get the list of logical buildsystem target names added by the
project in a directory.
* A :prop_tgt:`LINK_WHAT_YOU_USE` target property and supporting
:variable:`CMAKE_LINK_WHAT_YOU_USE` variable were introduced
to detect (on UNIX) shared libraries that are linked but not
needed by running ``ldd -r -u``.
* A :prop_dir:`SOURCE_DIR` directory property was added to get the
absolute path to the source directory associated with a directory.
* A :prop_dir:`SUBDIRECTORIES` directory property was added to
get the list of subdirectories added by a project in a directory.
* A :prop_tgt:`VS_SDK_REFERENCES` target property was added to tell
:ref:`Visual Studio Generators` to reference the named SDKs.
* A :prop_sf:`VS_TOOL_OVERRIDE` source file property was created to tell
:ref:`Visual Studio Generators` what tool to use for a source file.
* The :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property now applies
to executable targets with the :prop_tgt:`ENABLE_EXPORTS` property set.
* A :prop_sf:`XCODE_FILE_ATTRIBUTES` source file property was
added to tell the :generator:`Xcode` generator to generate
custom content in the Xcode project attributes for the file.
Modules
-------
* An :module:`AndroidTestUtilities` module was added to manage transfer
of test data to an Android device.
* The :module:`CheckFortranSourceCompiles` module macro
``CHECK_Fortran_SOURCE_COMPILES`` gained a ``SRC_EXT`` option
to specify a custom test Fortran source file extension.
* The :module:`ExternalProject` module gained ``HTTP_USERNAME`` and
``HTTP_PASSWORD`` options to set http download credentials.
* The :module:`ExternalProject` module gained a ``HTTP_HEADER``
option to add http download headers.
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a new
``REPORT_FILE`` option to specify the bison ``--report-file=`` option.
* The :module:`FindBZip2` module now provides imported targets.
* A :module:`FindICU` module was introduced to find the International
Components for Unicode (ICU) libraries and programs.
* The :module:`FindMatlab` module learned to find the SIMULINK and MAT
components.
* The :module:`FindMatlab` module :command:`matlab_add_mex` command learned
to add executables and modules.
* The :module:`FindMatlab` module :command:`matlab_add_unit_test` command
learned to support inline Matlab test code.
* The :module:`FindOpenCL` module now provides imported targets.
* The :module:`FindOpenMP` module learned to detect the OpenMP
version (specification date) from the compiler.
* A :module:`FindVulkan` module was added.
* The :module:`GenerateExportHeader` module learned a new
``CUSTOM_CONTENT_FROM_VARIABLE`` option to specify a variable
containing custom content for inclusion in the generated header.
* The :module:`GNUInstallDirs` module gained a new
:command:`GNUInstallDirs_get_absolute_install_dir` command.
* The :module:`UseJava` module gained APIs to "export" jar targets
for use by external CMake projects. See the ``install_jar_exports``
and ``export_jars`` functions.
CTest
-----
* CTest now supports test fixtures through the new :prop_test:`FIXTURES_SETUP`,
:prop_test:`FIXTURES_CLEANUP` and :prop_test:`FIXTURES_REQUIRED` test
properties. When using regular expressions or ``--rerun-failed`` to limit
the tests to be run, a fixture's setup and cleanup tests will automatically
be added to the execution set if any test requires that fixture.
* The :command:`ctest_configure`, :command:`ctest_build`,
:command:`ctest_test`, :command:`ctest_coverage`, and :command:`ctest_upload`
commands gained a new ``CAPTURE_CMAKE_ERROR`` option to capture any errors
that occur as the commands run into a variable and avoid affecting the return
code of the :manual:`ctest(1)` process.
CPack
-----
* CPack gained a :cpack_gen:`CPack productbuild Generator` on OS X.
* CPack gained a new :variable:`CPACK_PACKAGE_CHECKSUM` variable to
enable generation of a checksum file for each package file.
* The :cpack_gen:`CPack DEB Generator` learned to support long file names
when archive format is set to GNU tar.
See :variable:`CPACK_DEBIAN_ARCHIVE_TYPE`
* The :module:`CPackIFW` module gained a new
:command:`cpack_ifw_add_package_resources` command to include additional
resources in the installer binary.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands gained a new
``USER_INTERFACES`` option to add a list of additional pages to the IFW
installer.
* The :cpack_gen:`CPack RPM Generator` learned to generate debuginfo
packages on demand. See :variable:`CPACK_RPM_DEBUGINFO_PACKAGE`
and its per component version.
* The :cpack_gen:`CPack RPM Generator` learned to generate source rpm
(SRPM) packages on demand. See :variable:`CPACK_RPM_PACKAGE_SOURCES`,
:variable:`CPACK_RPM_SOURCE_PKG_BUILD_PARAMS` and
:variable:`CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX`.
* The :cpack_gen:`CPack NSIS Generator` now supports
:variable:`CPACK_NSIS_<compName>_INSTALL_DIRECTORY`.
This can be used to set component specific installation directories.
* The :cpack_gen:`CPack WIX Generator` now supports
:variable:`CPACK_WIX_SKIP_PROGRAM_FOLDER` to allow specification
of a custom absolute installation prefix outside
of the ProgramFiles folders.
* The :cpack_gen:`CPack WIX Generator` now supports
:variable:`CPACK_COMPONENT_<compName>_DISABLED`.
This can be used to deselect a component from being installed by default.
* The :cpack_gen:`CPack WIX Generator` now supports
:variable:`CPACK_WIX_PATCH_FILE` fragments for Feature elements.
* The :cpack_gen:`CPack WIX Generator` now supports
:variable:`CPACK_WIX_ROOT_FEATURE_TITLE` and
:variable:`CPACK_WIX_ROOT_FEATURE_DESCRIPTION` to allow the specification
of a custom title and description for the root feature element.
Other
-----
* :manual:`cmake(1)` gained a ``-E capabilities`` option to provide a
machine-readable (JSON) description of the capabilities of the
cmake tool (available generators, etc.).
* A new :manual:`cmake-server(7)` mode was added to provide semantic
information about a CMake-generated buildsystem to clients through
a JSON protocol. Currently all protocols are experimental and subject
to change.
* The :manual:`cmake(1)` command learned a ``--trace-source=<file>`` option.
* :manual:`ccmake(1)` learned to support vim-like navigation bindings.
* :manual:`cmake-gui(1)` gained a button to open the generated project file
for :ref:`Visual Studio Generators` and the :generator:`Xcode` generator.
Deprecated and Removed Features
===============================
* We no longer provide Linux i386 binaries for download from ``cmake.org``
for new versions of CMake.
* Vim support files ``cmake-indent.vim``, ``cmake-syntax.vim``, and
``cmake-help.vim`` have been removed in favor of the files now provided
from the `vim-cmake-syntax`_ project.
* Support for building CMake itself with some compilers was dropped:
* Visual Studio 7.1 and 2005 -- superseded by VS 2008 and above
* MinGW.org mingw32 -- superseded by MSYS2 mingw32 and mingw64
CMake still supports generating build systems for other projects using
these compilers.
Other Changes
=============
* The Fortran dependency scanner learned to support the syntax of
`Fortran Submodules`_.
* Vim support files ``indent/cmake.vim`` and ``syntax/cmake.vim``
from the `vim-cmake-syntax`_ project are now distributed with CMake.
.. _`Fortran Submodules`: http://fortranwiki.org/fortran/show/Submodules
.. _`vim-cmake-syntax`: https://github.com/pboettch/vim-cmake-syntax

View file

@ -0,0 +1,417 @@
CMake 3.8 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.7 include the following.
New Features
============
Languages
---------
C#
^^
* CMake learned to support ``CSharp`` (C#) as a first-class language that
can be enabled via the :command:`project` and :command:`enable_language`
commands. It is currently supported by the :ref:`Visual Studio Generators`
for VS 2010 and above.
C# assemblies and programs can be added just like common C++ targets using
the :command:`add_library` and :command:`add_executable` commands.
References between C# targets in the same source tree may be specified by
:command:`target_link_libraries` like for C++. References to system or
3rd-party assemblies may be specified by the target properties
:prop_tgt:`VS_DOTNET_REFERENCE_<refname>` and
:prop_tgt:`VS_DOTNET_REFERENCES`.
* More fine tuning of C# targets may be done using target and source
file properties. Specifically the target properties related to
Visual Studio (``VS_*``) are worth a look (for setting toolset
versions, root namespaces, assembly icons, ...).
CUDA
^^^^
* CMake learned to support ``CUDA`` as a first-class language that can be
enabled via the :command:`project` and :command:`enable_language` commands.
* ``CUDA`` is currently supported by the :ref:`Makefile Generators`
and the :generator:`Ninja` generator on Linux, macOS, and Windows.
Support for the Visual Studio IDE is under development but not
included in this release.
* The NVIDIA CUDA Toolkit compiler (``nvcc``) is supported.
C & C++
^^^^^^^
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
now offers meta-features that request compiler modes for specific language
standard levels (e.g. ``cxx_std_11``). See
:prop_gbl:`CMAKE_C_KNOWN_FEATURES` and :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES`.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of C++ 17. No specific features are yet enumerated besides
the ``cxx_std_17`` meta-feature.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of the availability of C99 in gcc since version 3.4.
Platforms
---------
* A new minimal platform file for ``Fuchsia`` was added.
Generators
----------
* The :generator:`CodeBlocks` extra generator may now be used to
generate with :generator:`NMake Makefiles JOM`.
* The :ref:`Visual Studio Generators` for VS 2013 and above learned to
support a ``host=x64`` option in the :variable:`CMAKE_GENERATOR_TOOLSET`
value (e.g. via the :manual:`cmake(1)` ``-T`` option) to request use
of a VS 64-bit toolchain on 64-bit hosts.
* The :ref:`Visual Studio Generators` learned to treat files passed to
:command:`target_link_libraries` whose names end in ``.targets``
as MSBuild "targets" files to be imported into generated project files.
Commands
--------
* The :command:`add_custom_command` and :command:`add_custom_target` commands
learned the option ``COMMAND_EXPAND_LISTS`` which causes lists in the
``COMMAND`` argument to be expanded, including lists created by generator
expressions.
* The :command:`execute_process` command gained an ``ENCODING`` option to
specify on Windows which encoding is used for output from child process.
* The :command:`math(EXPR)` command gained support for unary
``+`` and ``-`` operators.
* The :command:`source_group` command gained ``TREE`` and ``PREFIX``
options to add groups following source tree directory structure.
* The :command:`string(TIMESTAMP)` command learned to treat ``%%``
as a way to encode plain ``%``.
* The :command:`string(TIMESTAMP)` command will now honor the
``SOURCE_DATE_EPOCH`` environment variable and use its value
instead of the current time.
* The :command:`try_compile` command source file signature gained new options
to specify the language standard to use in the generated test project.
* The :command:`try_compile` command source file signature now honors
language standard variables like :variable:`CMAKE_CXX_STANDARD`.
See policy :policy:`CMP0067`.
Variables
---------
* A :variable:`CMAKE_CODELITE_USE_TARGETS` variable was added to tell the
:generator:`CodeLite` extra generator to change the generated project
to have target-centric organization.
The ``build``, ``rebuild``, and ``clean`` operations within ``CodeLite``
then work on a selected target rather than the whole workspace.
(Note that the :generator:`Ninja` clean operation on a target
includes its dependencies, though.)
* The :variable:`CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS` variable was added to
tell the :generator:`Sublime Text 2` extra generator to place specified
environment variables in the generated ``.sublime-project``.
* The :variable:`CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE` variable was added
to tell the :generator:`Sublime Text 2` extra generator whether to exclude
the build tree from the ``.sublime-project`` when it is inside the source
tree.
* A :variable:`CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD` variable was
added to tell :ref:`Visual Studio Generators` for VS 2010 and above
to include the ``PACKAGE`` target in the default build, similar to
the existing :variable:`CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD`
variable for the ``INSTALL`` target.
Properties
----------
* A :prop_tgt:`BUILD_RPATH` target property and corresponding
:variable:`CMAKE_BUILD_RPATH` variable were added to support custom
``RPATH`` locations to be added to binaries in the build tree.
* The :prop_sf:`COMPILE_FLAGS` source file property learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`FRAMEWORK` target property may now also be applied to
static libraries on Apple targets. It will result in a proper
Framework but with a static library inside.
* :ref:`Imported <Imported Targets>` :ref:`Interface Libraries` learned new
:prop_tgt:`IMPORTED_LIBNAME` and :prop_tgt:`IMPORTED_LIBNAME_<CONFIG>`
target properties to specify a link library name since interface libraries
do not build their own library files.
* A :prop_tgt:`<LANG>_CPPLINT` target property and supporting
:variable:`CMAKE_<LANG>_CPPLINT` variable were introduced to tell
the :ref:`Makefile Generators` and the :generator:`Ninja` generator to
run the ``cpplint`` style checker along with the compiler for ``C`` and
``CXX`` languages.
* A :prop_tgt:`MANUALLY_ADDED_DEPENDENCIES` target property has been added.
It provides a read-only list of dependencies that have been added with
the :command:`add_dependencies` command.
* The :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` target property learned
to interpret empty list elements as referring to the configuration-less
imported location specified by :prop_tgt:`IMPORTED_LOCATION`.
* The :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target property is now supported
on :ref:`Imported <Imported Targets>` :ref:`Interface Libraries`.
* New source file properties :prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC`,
:prop_sf:`SKIP_AUTORCC`, and :prop_sf:`SKIP_AUTOGEN` were added to allow
source files to be excluded from processing by :prop_tgt:`AUTOMOC`,
:prop_tgt:`AUTOUIC`, and :prop_tgt:`AUTORCC` target properties.
* A :prop_sf:`VS_COPY_TO_OUT_DIR` source file property was added to
tell :ref:`Visual Studio Generators` for VS 2010 and above whether
or not a file should e copied to the output directory.
* A :prop_tgt:`VS_DEBUGGER_WORKING_DIRECTORY` target property was added
to tell :ref:`Visual Studio Generators` for VS 2010 and above what
debugger working directory should be set for the target.
* A :prop_tgt:`VS_DOTNET_REFERENCES_COPY_LOCAL` target property was added
to specify whether to copy referenced assemblies to the output directory.
* A :prop_tgt:`VS_DOTNET_REFERENCE_<refname>` target property was added
to tell :ref:`Visual Studio Generators` for VS 2010 and above to add
a .NET reference with a given hint path.
* A :prop_sf:`VS_INCLUDE_IN_VSIX` source file property was added to
tell :ref:`Visual Studio Generators` for VS 2010 and above whether
to include the file in a Visual Studio extension package.
* A :prop_sf:`VS_RESOURCE_GENERATOR` source file property was added to
give :ref:`Visual Studio Generators` for VS 2010 and above a setting
for the resource generator (``C#`` only).
* A :prop_tgt:`VS_USER_PROPS` target property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to use a
custom MSBuild user ``.props`` file.
* A :prop_gbl:`XCODE_EMIT_EFFECTIVE_PLATFORM_NAME` global property was
added to tell the :generator:`Xcode` generator whether to emit the
``EFFECTIVE_PLATFORM_NAME`` variable. This is useful when building
with multiple SDKs like ``macosx`` and ``iphoneos`` in parallel.
* New :prop_tgt:`XCODE_PRODUCT_TYPE` and :prop_tgt:`XCODE_EXPLICIT_FILE_TYPE`
target properties were created to tell the :generator:`Xcode` generator
to use custom values of the corresponding attributes for a target in the
generated Xcode project.
Modules
-------
* A :module:`CSharpUtilities` module was added to aid parameterization of
Visual Studio C# targets. It provides functions to allow automated
setting of source file properties to support Windows Forms, WPF/XAML or
other technologies as needed.
* The :module:`ExternalData` module learned to support multiple
content links for one data file using different hashes, e.g.
``img.png.sha256`` and ``img.png.sha1``. This allows objects
to be fetched from sources indexed by different hash algorithms.
* The :module:`ExternalProject` module gained the ``GIT_PROGRESS`` option to
force Git to show progress when cloning repositories.
* The :module:`ExternalProject` module gained a ``GIT_CONFIG`` option
to pass ``--config`` options to Git when cloning repositories.
* The :module:`FeatureSummary` module :command:`feature_summary` command now
accepts a new ``QUIET_ON_EMPTY`` option that suppresses the output when
the list of packages that belong to the selected category is empty.
* The :module:`FeatureSummary` module :command:`add_feature_info` command
now accepts lists of dependencies for deciding whether a feature is enabled
or not.
* The package types accepted by the :module:`FeatureSummary` module can now
be tweaked by changing the :variable:`FeatureSummary_PKG_TYPES`,
:variable:`FeatureSummary_REQUIRED_PKG_TYPES` and
:variable:`FeatureSummary_DEFAULT_PKG_TYPE` global properties.
* The :module:`FindOpenGL` module now provides imported targets
``OpenGL::GL`` and ``OpenGL::GLU`` when the libraries are found.
* The :module:`UseSWIG` module gained a ``swig_add_library`` command
to give more flexibility over the old ``swig_add_module`` command.
* The :module:`UseSWIG` module ``swig_add_source_to_module`` command
learned a new ``SWIG_OUTFILE_DIR`` option to control the output
file location (``swig -o``).
* The :module:`WriteCompilerDetectionHeader` module gained the
``ALLOW_UNKNOWN_COMPILERS`` and ``ALLOW_UNKNOWN_COMPILER_VERSIONS`` options
that allow creation of headers that will work also with unknown or old
compilers by simply assuming they do not support any of the requested
features.
CTest
-----
* The :command:`ctest_memcheck` command gained a ``DEFECT_COUNT <var>``
option to capture the number of memory defects detected.
* The :command:`ctest_memcheck` command learned to read the location of
suppressions files for sanitizers from the
:variable:`CTEST_MEMORYCHECK_SUPPRESSIONS_FILE` variable.
* The :command:`ctest_memcheck` command learned to support ``LeakSanitizer``
independently from ``AddressSanitizer``.
* The :command:`ctest_update` command ``CDASH_UPLOAD`` signature was taught
to honor the ``RETRY_COUNT``, ``RETRY_DELAY``, and ``QUIET`` options.
CPack
-----
* The :module:`CPackIFWConfigureFile` module was added to define a new
:command:`cpack_ifw_configure_file` command to configure file templates
prepared in QtIFW/SDK/Creator style.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands gained a new
``DEFAULT``, ``VIRTUAL``, ``FORCED_INSTALLATION``, ``REQUIRES_ADMIN_RIGHTS``,
``DISPLAY_NAME``, ``UPDATE_TEXT``, ``DESCRIPTION``, ``RELEASE_DATE``,
``AUTO_DEPEND_ON`` and ``TRANSLATIONS`` options to more specific
configuration.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component`
command gained a new ``DEPENDENCIES`` alias for ``DEPENDS`` option.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component_group`
command gained a new ``DEPENDS`` option. The ``DEPENDENCIES`` alias also
added.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands ``PRIORITY``
option now is deprecated and will be removed in a future version of CMake.
Please use new ``SORTING_PRIORITY`` option instead.
* The :cpack_gen:`CPack IFW Generator` gained new
:variable:`CPACK_IFW_PACKAGE_WATERMARK`,
:variable:`CPACK_IFW_PACKAGE_BANNER`,
:variable:`CPACK_IFW_PACKAGE_BACKGROUND`,
:variable:`CPACK_IFW_PACKAGE_WIZARD_STYLE`,
:variable:`CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH`,
:variable:`CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT`, and
:variable:`CPACK_IFW_PACKAGE_TITLE_COLOR`
variables to customize a QtIFW installer look.
* The :cpack_gen:`CPack productbuild Generator` gained options to sign packages.
See the variables :variable:`CPACK_PRODUCTBUILD_IDENTITY_NAME`,
:variable:`CPACK_PRODUCTBUILD_KEYCHAIN_PATH`,
:variable:`CPACK_PKGBUILD_IDENTITY_NAME`, and
:variable:`CPACK_PKGBUILD_KEYCHAIN_PATH`.
* The :cpack_gen:`CPack RPM Generator` learned to omit tags that are not
supported by provided ``rpmbuild`` tool. If unsupported tags are set they
are ignored and a developer warning is printed out.
* The :cpack_gen:`CPack RPM Generator` learned to generate main component
package which forces generation of a rpm for defined component without
component suffix in filename and package name.
See :variable:`CPACK_RPM_MAIN_COMPONENT` variable.
* The :cpack_gen:`CPack RPM Generator` learned to generate a single
``debuginfo`` package on demand even if components packaging is used.
See :variable:`CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE` variable.
* The :cpack_gen:`CPack RPM Generator` learned to support
multiple directives per file when using
:variable:`CPACK_RPM_USER_FILELIST` variable.
Other
-----
* CMake functionality using cryptographic hashes now supports SHA-3 algorithms.
* A new generator expression ``$<IF:cond,true-value,false-value>`` was added.
It resolves to the true-value if the condition is ``1`` and resolves to
the false-value if the condition is ``0``.
Deprecated and Removed Features
===============================
* The :module:`FeatureSummary` module commands :command:`set_package_info`,
:command:`set_feature_info`, :command:`print_enabled_features`, and
:command:`print_disabled_features` are now deprecated.
* The :module:`UseSWIG` module ``swig_add_module`` command is now
deprecated in favor of ``swig_add_library``.
Other Changes
=============
* If a command specified by the :prop_tgt:`<LANG>_CLANG_TIDY` target property
returns non-zero at build time this is now treated as an error instead of
silently ignored.
* The :command:`ctest_memcheck` command no longer automatically adds
``leak_check=1`` to the options used by ``AddressSanitizer``. The default
behavior of ``AddressSanitizer`` is to run `LeakSanitizer` to check leaks
unless ``leak_check=0``.
* The :command:`ctest_memcheck` command was fixed to correctly append extra
sanitizer options read from the
:variable:`CTEST_MEMORYCHECK_SANITIZER_OPTIONS` variable to the environment
variables used internally by the sanitizers.
* The :module:`FeatureSummary` module :command:`set_package_properties`
command no longer forces the package type to ``OPTIONAL`` when the type
is not explicitly set.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of features supported by Intel C++ compilers versions 12.1
through 17.0 on UNIX and Windows platforms.
* Calls to the :module:`FindPkgConfig` module :command:`pkg_check_modules`
command following a successful call learned to re-evaluate the cached values
for a given prefix after changes to the parameters to the command for that
prefix.
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`, generated
``moc_*``, ``*.moc`` and ``ui_*`` are placed in the
``<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include`` directory which
is automatically added to the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
It is therefore not necessary anymore to have
:variable:`CMAKE_CURRENT_BINARY_DIR` in the target's
:prop_tgt:`INCLUDE_DIRECTORIES`.
* The :generator:`Sublime Text 2` generator no longer runs the native
build command (e.g. ``ninja`` or ``make``) with verbose build output
enabled.
* The :command:`try_compile` command source file signature now
honors the :variable:`CMAKE_WARN_DEPRECATED` variable value
in the generated test project.
* The :ref:`Visual Studio Generators` for VS 2010 and above now place
per-source file flags after target-wide flags when they are classified
as raw flags with no project file setting (``AdditionalOptions``).
This behavior is more consistent with the ordering of flags produced
by other generators, and allows flags on more-specific properties
(per-source) to override those on more general ones (per-target).
* The precompiled Windows binary MSI package provided on ``cmake.org`` now
records the installation directory in the Windows Registry under the key
``HKLM\Software\Kitware\CMake`` with a value named ``InstallDir``.

View file

@ -0,0 +1,343 @@
CMake 3.9 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 3.8 include the following.
New Features
============
Languages
---------
* ``CUDA`` is now supported by the :ref:`Visual Studio Generators`
for VS 2010 and above. This complements the existing support by the
:ref:`Makefile Generators` and the :generator:`Ninja` generator.
CUDA 8.0.61 or higher is recommended due to known bugs in the VS
integration by earlier versions.
* CMake is now aware of the :prop_tgt:`C++ standards <CXX_STANDARD>` and
:prop_tgt:`C standards <C_STANDARD>` and their associated meta-features for
the following :variable:`compiler ids <CMAKE_<LANG>_COMPILER_ID>`: ``Cray``,
``PGI``, and ``XL``.
Generators
----------
* :ref:`Visual Studio Generators` for VS 2010 and above learned to support
the ``ASM_NASM`` language when ``nasm`` is installed.
* The :generator:`Xcode` generator learned to create Xcode schema files.
This is an experimental feature and can be activated by setting the
:variable:`CMAKE_XCODE_GENERATE_SCHEME` variable to a ``TRUE`` value.
Commands
--------
* The :command:`add_library` command ``IMPORTED`` option learned to support
:ref:`Object Libraries`.
* The :command:`find_library` command learned to search ``libx32`` paths
when the build targets the ``x32`` ABI. See the
:prop_gbl:`FIND_LIBRARY_USE_LIBX32_PATHS` global property.
* The :command:`include_external_msproject` command learned to use
the :prop_tgt:`MAP_IMPORTED_CONFIG_<CONFIG>` target property
to map current configurations to the external configurations.
* The :command:`install(TARGETS)` command learned a new ``OBJECTS`` option to
specify where to install :ref:`Object Libraries`.
* The :command:`install(EXPORT)` command learned how to export
:ref:`Object Libraries`.
* The :command:`project` command learned an optional ``DESCRIPTION``
parameter to set the :variable:`PROJECT_DESCRIPTION` variable.
* The :command:`separate_arguments` command gained a ``NATIVE_COMMAND`` mode
that performs argument separation depending on the host operating system.
Variables
---------
* A :variable:`CMAKE_ANDROID_NDK_DEPRECATED_HEADERS` variable was added
for use when :ref:`Cross Compiling for Android with the NDK` to request
use of the deprecated headers even when unified headers are available.
The default is now to use unified headers if available.
* A :variable:`CMAKE_AUTOMOC_DEPEND_FILTERS` variable was introduced to
allow :variable:`CMAKE_AUTOMOC` to extract additional dependency file names
for ``moc`` from the contents of source files.
* A :variable:`CMAKE_AUTOUIC_SEARCH_PATHS` variable was introduced to
allow :variable:`CMAKE_AUTOUIC` to search for ``foo.ui`` in more
places than the vicinity of the file including ``ui_foo.h``.
* A :variable:`CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX` variable was added to
tell the :command:`find_library` command to search in a ``lib<suffix>``
directory before each ``lib`` directory that would normally be searched.
* A :variable:`CMAKE_INTERPROCEDURAL_OPTIMIZATION` variable was added to
initialize the :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` property on all
targets.
* A :variable:`CMAKE_<LANG>_COMPILER_AR` variable was added to hold
the path to the GCC/Clang wrapper of ``ar``.
* A :variable:`CMAKE_<LANG>_COMPILER_RANLIB` variable was added to hold
the path to the GCC/Clang wrapper of ``ranlib``.
* The :variable:`CMAKE_SYSROOT_COMPILE` and :variable:`CMAKE_SYSROOT_LINK`
variables were added to use separate sysroots for compiling and linking.
Properties
----------
* A new :prop_tgt:`AUTOGEN_BUILD_DIR` target property was introduced to set
a custom output directory for :prop_tgt:`AUTOMOC`, :prop_tgt:`AUTOUIC`,
and :prop_tgt:`AUTORCC`.
* A new :prop_tgt:`AUTOMOC_DEPEND_FILTERS` target property was introduced to
allow :prop_tgt:`AUTOMOC` to extract additional dependency file names
for ``moc`` from the contents of source files.
* A new :prop_tgt:`AUTOUIC_SEARCH_PATHS` target property was introduced to
allow :prop_tgt:`AUTOUIC` to search for ``foo.ui`` in more
places than the vicinity of the file including ``ui_foo.h``.
* Global properties :prop_gbl:`AUTOGEN_SOURCE_GROUP`,
:prop_gbl:`AUTOMOC_SOURCE_GROUP` and
:prop_gbl:`AUTORCC_SOURCE_GROUP` were
introduced to allow files generated by :prop_tgt:`AUTOMOC` or
:prop_tgt:`AUTORCC` to be placed in a :command:`source_group`.
* A :prop_tgt:`BUILD_WITH_INSTALL_NAME_DIR` target property and corresponding
:variable:`CMAKE_BUILD_WITH_INSTALL_NAME_DIR` variable were added to
control whether to use the :prop_tgt:`INSTALL_NAME_DIR` target property
value for binaries in the build tree. This is for macOS ``install_name``
as :prop_tgt:`BUILD_WITH_INSTALL_RPATH` is for ``RPATH``.
* A :prop_tgt:`CUDA_PTX_COMPILATION` target property was added to
:ref:`Object Libraries` to support compiling to ``.ptx`` files
instead of host object files.
* A :prop_gbl:`GENERATOR_IS_MULTI_CONFIG` global property was
added to determine whether the current generator is a multi-configuration
generator (such as :ref:`Visual Studio Generators` or :generator:`Xcode`).
* The :prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property is now enforced
when enabled. CMake will add IPO flags unconditionally or produce an error
if it does not know the flags for the current compiler. The project is now
responsible to use the :module:`CheckIPOSupported` module to check for IPO
support before enabling the target property. See policy :policy:`CMP0069`.
* The :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property may now
be used in combination with explicit ``.def`` files in order to
export all symbols from the object files within a target plus
an explicit list of symbols that the linker finds in dependencies
(e.g. ``msvcrt.lib``).
Modules
-------
* A :module:`CheckIPOSupported` module was added to help projects
check whether interprocedural optimization (IPO) is supported by
the current toolchain and CMake version.
* The :module:`CMakeFindDependencyMacro` module ``find_dependency`` macro
now forwards all arguments to the underlying :command:`find_package`
call. Existing uses will continue to function as before, but callers can
now access the full suite of arguments that :command:`find_package` accepts.
* The :module:`FeatureSummary` module :command:`feature_summary` command now
accepts the new ``DEFAULT_DESCRIPTION`` option that will print the default
title for the selected package type.
* The :module:`FeatureSummary` module gained a new
:variable:`FeatureSummary_<TYPE>_DESCRIPTION` variable that can be defined
for each ``<TYPE>`` to replace the type name with the specified string
whenever the package type is used in an output string by the module.
* The :module:`FindDoxygen` module learned to control Doxygen behavior using
CMake variables and generate documentation via the newly added
:command:`doxygen_add_docs` function. The Doxygen input file (``Doxyfile``)
is automatically generated and doxygen is run as part of a custom target.
Additional components can be specified to find optional tools: ``dot``,
``mscgen`` and ``dia``.
* The :module:`FindMPI` module now provides imported targets.
* The :module:`FindProtobuf` module :command:`protobuf_generate_cpp`
command gained an ``EXPORT_MACRO`` option to specify the name of
a DLL export markup macro.
* The :module:`FindProtobuf` module now supports usage of static libraries
for Unix via a new ``Protobuf_USE_STATIC_LIBS`` input variable.
* The :module:`FindProtobuf` module now provides imported targets
when the libraries are found.
* A new :module:`GoogleTest` module was added to provide the
:command:`gtest_add_tests` function independently of the :module:`FindGTest`
module. The function was also updated to support keyword arguments, with
functionality expanded to allow a test name prefix and suffix to be
specified, the dependency on the source files to be optional and the list of
discovered test cases to be returned to the caller.
CTest
-----
* The :command:`ctest_submit` command gained a ``HTTPHEADER`` option
to specify custom headers to send during submission.
* The :manual:`ctest(1)` executable gained new options which allow the
developer to disable automatically adding tests to the test set to satisfy
fixture dependencies. ``-FS`` prevents adding setup tests for fixtures
matching the provided regular expression, ``-FC`` prevents adding cleanup
tests for matching fixtures and ``-FA`` prevents adding any test for matching
fixtures.
* A :prop_test:`DISABLED` test property was added to mark tests that
are configured but explicitly disabled so they do not run.
CPack
-----
* The :cpack_gen:`CPack Archive Generator` learned to modify the filename
per-component. See the :variable:`CPACK_ARCHIVE_FILE_NAME` variable and
its per-component version :variable:`CPACK_ARCHIVE_<component>_FILE_NAME`.
* The :module:`CPackComponent` module :command:`cpack_add_component` command
gained a new ``PLIST <filename>`` option to specify the ``pkgbuild``
``--component-plist`` argument when using the
:module:`productbuild <CPackProductBuild>` generator.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands gained
internationalization support for ``DISPLAY_NAME`` and ``DESCRIPTION``
options.
* The :cpack_gen:`CPack IFW Generator` learned the new hint
:variable:`CPACK_IFW_ROOT` variable for finding the QtIFW tool suite
installed in a non-standard place.
* The :cpack_gen:`CPack productbuild Generator` gained a new
:variable:`CPACK_PRODUCTBUILD_RESOURCES_DIR` variable to
specify resources to be copied into the ``Resources``
directory.
* The :cpack_gen:`CPack RPM Generator` learned to modify the ``debuginfo``
package name. See the :variable:`CPACK_RPM_DEBUGINFO_FILE_NAME` variable.
* The :cpack_gen:`CPack WIX Generator` patching system now has the
ability to set additional attributes. This can be done by specifying
attributes with the ``CPackWiXFragment`` XML tag after the ``Id`` attribute.
See the :variable:`CPACK_WIX_PATCH_FILE` variable.
* The :cpack_gen:`CPack WIX Generator` implemented a new
:variable:`CPACK_WIX_ROOT_FOLDER_ID` variable which allows
using a custom root folder ID instead of the default
``ProgramFilesFolder`` / ``ProgramFiles64Folder``.
Other
-----
* Interprocedural optimization (IPO) is now supported for GNU and Clang
compilers using link time optimization (LTO) flags. See the
:prop_tgt:`INTERPROCEDURAL_OPTIMIZATION` target property and
:module:`CheckIPOSupported` module.
* The ``TARGET_OBJECTS``
:manual:`generator expression <cmake-generator-expressions(7)>`
is now supported by the :command:`add_custom_command` and
:command:`file(GENERATE)` commands.
* Two new informational generator expressions to retrieve Apple Bundle
directories have been added. The first one ``$<TARGET_BUNDLE_DIR:tgt>``
outputs the full path to the Bundle directory, the other one
``$<TARGET_BUNDLE_CONTENT_DIR:tgt>`` outputs the full path to the
``Contents`` directory of macOS Bundles and App Bundles. For all other
bundle types and SDKs it is identical with ``$<TARGET_BUNDLE_DIR:tgt>``.
The new expressions are helpful to query Bundle locations independent of
the different Bundle types and layouts on macOS and iOS.
Deprecated and Removed Features
===============================
* An explicit deprecation diagnostic was added for policies ``CMP0036``
and below. The :manual:`cmake-policies(7)` manual explains that the
OLD behaviors of all policies are deprecated and that projects should
always port to the NEW behaviors as soon as possible.
* The :generator:`Visual Studio 8 2005` generator is now deprecated
and will be removed in a future version of CMake.
* The :generator:`Visual Studio 7 .NET 2003` generator has been removed.
* The :generator:`Xcode` generator dropped support for Xcode versions
older than 3.
* The :module:`FindDoxygen` module has deprecated several variables.
* The version of curl bundled with CMake no longer accepts URLs of the form
``file://c:/...`` on Windows due to a change in upstream curl 7.52. Use
the form ``file:///c:/...`` instead to work on all versions.
Other Changes
=============
* When using :prop_tgt:`AUTOMOC`, CMake now scans for the presence of the
``Q_PLUGIN_METADATA`` macro and reruns moc when the file from the
macro's ``FILE`` argument changes.
* When :prop_tgt:`AUTOMOC` detects an include statement of the form
``#include "moc_<basename>.cpp"`` the search for the respective header file
now looks in the :prop_tgt:`INCLUDE_DIRECTORIES` of the target as well.
* When running tests, CTest learned to treat skipped tests (using the
:prop_test:`SKIP_RETURN_CODE` property) the same as tests with the new
:prop_test:`DISABLED` property. Due to this change, CTest will not indicate
failure when all tests are either skipped or pass.
* The :generator:`Ninja` generator has loosened the dependencies of object
compilation. Object compilation now depends only on custom targets
and custom commands associated with libraries on which the object's target
depends and no longer depends on the libraries themselves. Source files
in dependent targets may now compile without waiting for their targets'
dependencies to link.
* On macOS, ``RPATH`` settings such as :prop_tgt:`BUILD_WITH_INSTALL_RPATH`
no longer affect the ``install_name`` field. See policy :policy:`CMP0068`.
* The :generator:`Visual Studio 14 2015` generator has been taught about
a change to the ``v140`` toolset made by a VS 2015 update. VS changed
the set of values it understands for the ``GenerateDebugInformation``
linker setting that produces the ``-DEBUG`` linker flag variants.
Updates
=======
Changes made since CMake 3.9.0 include the following.
3.9.1
-----
* The ``find_`` command ``PACKAGE_ROOT`` search path group added by
CMake 3.9.0 has been removed for the 3.9 series due to regressions
caused by new use of ``<PackageName>_ROOT`` variables. The behavior
may be re-introduced in the future in a more-compatible way.
3.9.2
-----
* On macOS, the default application bundle ``Info.plist`` file no longer
enables Hi-DPI support as it did in 3.9.0 and 3.9.1. The change had
to be reverted because it broke iOS applications.
* The Xcode generator no longer adds "outputPaths" to custom script
build phases as it did in 3.9.0 and 3.9.1. This was added in an
attempt to support Xcode 9's new build system, but broke incremental
rebuilds for both the old and new Xcode build systems.

View file

@ -0,0 +1,16 @@
..
This file should be included by the adjacent "index.rst"
in development versions but not in release versions.
Changes Since Release
=====================
The following noteworthy changes have been made in this development
version since the preceding release but have not yet been consolidated
into notes for a specific release version:
.. toctree::
:maxdepth: 1
:glob:
dev/*

View file

@ -0,0 +1,34 @@
:orphan:
CMake Release Notes
*******************
..
This file should include the adjacent "dev.txt" file
in development versions but not in release versions.
Releases
========
.. toctree::
:maxdepth: 1
3.18 <3.18>
3.17 <3.17>
3.16 <3.16>
3.15 <3.15>
3.14 <3.14>
3.13 <3.13>
3.12 <3.12>
3.11 <3.11>
3.10 <3.10>
3.9 <3.9>
3.8 <3.8>
3.7 <3.7>
3.6 <3.6>
3.5 <3.5>
3.4 <3.4>
3.3 <3.3>
3.2 <3.2>
3.1 <3.1>
3.0 <3.0>