|
|
|
CMake 3.27 Release Notes
|
|
|
|
************************
|
|
|
|
|
|
|
|
.. only:: html
|
|
|
|
|
|
|
|
.. contents::
|
|
|
|
|
|
|
|
Changes made since CMake 3.26 include the following.
|
|
|
|
|
|
|
|
New Features
|
|
|
|
============
|
|
|
|
|
|
|
|
Debugger
|
|
|
|
--------
|
|
|
|
|
|
|
|
* :manual:`cmake(1)` now supports interactive debugging of the CMake language.
|
|
|
|
See the :option:`--debugger <cmake --debugger>` option.
|
|
|
|
|
|
|
|
Presets
|
|
|
|
-------
|
|
|
|
|
|
|
|
* :manual:`cmake-presets(7)` files now support schema version ``7``.
|
|
|
|
|
|
|
|
* :manual:`cmake-presets(7)` now supports ``$penv{}`` macro expansion
|
|
|
|
in ``include`` fields.
|
|
|
|
|
|
|
|
Generators
|
|
|
|
----------
|
|
|
|
|
|
|
|
* The :ref:`Makefile <Makefile Generators>` and :ref:`Ninja <Ninja Generators>`
|
|
|
|
generators now support using the ``--dependency-file`` linker flag,
|
|
|
|
added by GNU Binutils 2.35 and LLVM's LLD 12.0.0, so that files read by the
|
|
|
|
linker will cause a relink if they change (typically modified timestamps).
|
|
|
|
See the :variable:`CMAKE_LINK_DEPENDS_USE_LINKER` variable.
|
|
|
|
|
|
|
|
* The :ref:`Visual Studio Generators` for VS 14 (2015) and above learned to
|
|
|
|
select the Windows SDK version explicitly using a ``version=`` field
|
|
|
|
in the :variable:`CMAKE_GENERATOR_PLATFORM` variable.
|
|
|
|
See :ref:`Visual Studio Platform Selection`.
|
|
|
|
|
|
|
|
Languages
|
|
|
|
---------
|
|
|
|
|
|
|
|
* The ``CXX`` language now treats source file extensions
|
|
|
|
``.ccm``, ``.cxxm``, and ``.c++m`` as C++.
|
|
|
|
|
|
|
|
File-Based API
|
|
|
|
--------------
|
|
|
|
|
|
|
|
* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
|
|
|
|
been updated to 2.6.
|
|
|
|
|
|
|
|
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
|
|
|
|
a new "frameworks" field in the "compileGroups" objects.
|
|
|
|
|
|
|
|
Platforms
|
|
|
|
---------
|
|
|
|
|
|
|
|
* Apple text-based stubs (i.e. ``.tbd`` files) may now be created for shared
|
|
|
|
libraries on macOS. See the :prop_tgt:`ENABLE_EXPORTS` property.
|
|
|
|
|
|
|
|
Commands
|
|
|
|
--------
|
|
|
|
|
|
|
|
* The :command:`add_custom_command` command gained a new
|
|
|
|
``DEPENDS_EXPLICIT_ONLY`` option to tell the :ref:`Ninja Generators`
|
|
|
|
not to add any dependencies implied by the target to which it is
|
|
|
|
attached. The :variable:`CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY`
|
|
|
|
variable was added to enable ``DEPENDS_EXPLICIT_ONLY`` on all calls to
|
|
|
|
:command:`add_custom_command` command.
|
|
|
|
|
|
|
|
* The :command:`cmake_file_api` command was added for projects to add
|
|
|
|
:manual:`CMake file API <cmake-file-api(7)>` queries for the current
|
|
|
|
CMake run.
|
|
|
|
|
|
|
|
* The :command:`find_package` command now searches prefixes specified by
|
|
|
|
upper-case :variable:`<PACKAGENAME>_ROOT` CMake variables and upper-case
|
|
|
|
:envvar:`<PACKAGENAME>_ROOT` environment variables.
|
|
|
|
See policy :policy:`CMP0144`.
|
|
|
|
|
|
|
|
* The :command:`install(CODE)` and :command:`install(SCRIPT)` commands
|
|
|
|
now support the :genex:`$<INSTALL_PREFIX>` generator expression.
|
|
|
|
|
|
|
|
Variables
|
|
|
|
---------
|
|
|
|
|
|
|
|
* The :variable:`CMAKE_DLL_NAME_WITH_SOVERSION` variable and associated
|
|
|
|
:prop_tgt:`DLL_NAME_WITH_SOVERSION` target property were added to
|
|
|
|
optionally append the :prop_tgt:`SOVERSION` to the filename of the
|
|
|
|
``.dll`` part of a shared library on Windows.
|
|
|
|
|
|
|
|
* Variables :variable:`CMAKE_VS_DEBUGGER_COMMAND`,
|
|
|
|
:variable:`CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS`,
|
|
|
|
:variable:`CMAKE_VS_DEBUGGER_ENVIRONMENT`, and
|
|
|
|
:variable:`CMAKE_VS_DEBUGGER_WORKING_DIRECTORY` were added to initialize
|
|
|
|
corresponding target properties.
|
|
|
|
|
|
|
|
* The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION` variable
|
|
|
|
was added to initialize the :prop_tgt:`VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION`
|
|
|
|
target property on all targets when they are created.
|
|
|
|
|
|
|
|
Properties
|
|
|
|
----------
|
|
|
|
|
|
|
|
* A :prop_tgt:`CUDA_CUBIN_COMPILATION` target property was added to
|
|
|
|
:ref:`Object Libraries` to support compiling to ``.cubin`` files
|
|
|
|
instead of host object files. Currently only supported with NVIDIA.
|
|
|
|
|
|
|
|
* A :prop_tgt:`CUDA_FATBIN_COMPILATION` target property was added to
|
|
|
|
:ref:`Object Libraries` to support compiling to ``.fatbin`` files
|
|
|
|
instead of host object files. Currently only supported with NVIDIA.
|
|
|
|
|
|
|
|
* A :prop_tgt:`CUDA_OPTIX_COMPILATION` target property was added to
|
|
|
|
:ref:`Object Libraries` to support compiling to ``.optixir`` files
|
|
|
|
instead of host object files. Currently only supported with NVIDIA.
|
|
|
|
|
|
|
|
* The :prop_tgt:`<LANG>_CLANG_TIDY`, :prop_tgt:`<LANG>_CPPCHECK`,
|
|
|
|
:prop_tgt:`<LANG>_CPPLINT`, and :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE`,
|
|
|
|
target properties now support
|
|
|
|
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
|
|
|
|
|
|
|
* The :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property now supports
|
|
|
|
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
|
|
|
|
|
|
|
* The :prop_sf:`SKIP_LINTING` source file property was added to suppress
|
|
|
|
target-wide code checks on specific sources.
|
|
|
|
|
|
|
|
Modules
|
|
|
|
-------
|
|
|
|
|
|
|
|
* The :module:`FindCUDAToolkit` module now provides an imported target for
|
|
|
|
``cudla``, and imported targets for CUPTI's ``nvperf`` and ``pcsampling``
|
|
|
|
components.
|
|
|
|
|
|
|
|
* The :module:`FindDoxygen` module's :command:`doxygen_add_docs` command gained
|
|
|
|
a ``CONFIG_FILE`` option to specify a custom doxygen configuration file.
|
|
|
|
|
|
|
|
* The :module:`FindOpenGL` module gained support for components
|
|
|
|
``GLES2`` and ``GLES3``.
|
|
|
|
|
|
|
|
* The :module:`FindwxWidgets` module now provides an imported target.
|
|
|
|
|
|
|
|
Generator Expressions
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
* The :genex:`COMPILE_ONLY` generator expression was added to specify
|
|
|
|
compilation usage requirements without any linking requirements.
|
|
|
|
|
|
|
|
* ``$<LIST:...>`` generator expressions were added for
|
|
|
|
:ref:`query <GenEx List Queries>`,
|
|
|
|
:ref:`transformation <GenEx List Transformations>`, and
|
|
|
|
:ref:`ordering <GenEx List Ordering>` operations on
|
|
|
|
:ref:`lists <CMake Language Lists>`.
|
|
|
|
|
|
|
|
* ``$<PATH:...>`` generator expressions for
|
|
|
|
:ref:`decomposition <GenEx Path Decomposition>` and
|
|
|
|
:ref:`transformation <GenEx Path Transformations>` operations learned
|
|
|
|
to process :ref:`lists <CMake Language Lists>` of paths element-wise.
|
|
|
|
|
|
|
|
* The :genex:`TARGET_IMPORT_FILE`, :genex:`TARGET_IMPORT_FILE_BASE_NAME`,
|
|
|
|
:genex:`TARGET_IMPORT_FILE_PREFIX`, :genex:`TARGET_IMPORT_FILE_SUFFIX`,
|
|
|
|
:genex:`TARGET_IMPORT_FILE_NAME`, and :genex:`TARGET_IMPORT_FILE_DIR`
|
|
|
|
generator expressions were added. These expand to details about the
|
|
|
|
linker import file for a target.
|
|
|
|
|
|
|
|
* The :genex:`TARGET_RUNTIME_DLL_DIRS` generator expression was added.
|
|
|
|
It expands to a list of the directories containing DLLs in
|
|
|
|
:genex:`TARGET_RUNTIME_DLLS`.
|
|
|
|
|
|
|
|
Autogen
|
|
|
|
-------
|
|
|
|
|
|
|
|
* The :variable:`CMAKE_AUTOMOC_EXECUTABLE`,
|
|
|
|
:variable:`CMAKE_AUTORCC_EXECUTABLE`, and
|
|
|
|
:variable:`CMAKE_AUTOUIC_EXECUTABLE` variables were added to initialize the
|
|
|
|
corresponding target properties as targets are created.
|
|
|
|
|
|
|
|
* The :prop_tgt:`AUTOGEN_USE_SYSTEM_INCLUDE` target property and
|
|
|
|
corresponding :variable:`CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE` variable were
|
|
|
|
added to explicitly control whether autogen headers are
|
|
|
|
considered system headers.
|
|
|
|
|
|
|
|
* The :prop_tgt:`INTERFACE_AUTOMOC_MACRO_NAMES` target property was added to
|
|
|
|
specify macro names for ``moc`` as a transitive usage requirement.
|
|
|
|
|
|
|
|
CTest
|
|
|
|
-----
|
|
|
|
|
|
|
|
* The :prop_test:`TIMEOUT_SIGNAL_NAME` and
|
|
|
|
:prop_test:`TIMEOUT_SIGNAL_GRACE_PERIOD` test properties were added
|
|
|
|
to specify a POSIX signal to send to a test process when its timeout
|
|
|
|
is reached.
|
|
|
|
|
|
|
|
CPack
|
|
|
|
-----
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack Inno Setup Generator` was added to package using
|
|
|
|
Inno Setup.
|
|
|
|
|
|
|
|
Deprecated and Removed Features
|
|
|
|
===============================
|
|
|
|
|
|
|
|
* Compatibility with versions of CMake older than 3.5 is now deprecated
|
|
|
|
and will be removed from a future version. Calls to
|
|
|
|
:command:`cmake_minimum_required` or :command:`cmake_policy` that set
|
|
|
|
the policy version to an older value now issue a deprecation diagnostic.
|
|
|
|
|
|
|
|
* The :ref:`Extra Generators` have been deprecated. IDEs may use the
|
|
|
|
:manual:`cmake-file-api(7)` to view CMake-generated project build trees.
|
|
|
|
|
|
|
|
* The :module:`FindCUDA` module, which has been deprecated since CMake 3.10,
|
|
|
|
has been removed by policy :policy:`CMP0146`. Port projects to CMake's
|
|
|
|
first-class ``CUDA`` language support.
|
|
|
|
|
|
|
|
* The :module:`FindPythonInterp` and :module:`FindPythonLibs` modules,
|
|
|
|
which have been deprecated since CMake 3.12, have been removed by
|
|
|
|
policy :policy:`CMP0148`. Port projects to :module:`FindPython3`,
|
|
|
|
:module:`FindPython2`, or :module:`FindPython`.
|
|
|
|
|
|
|
|
* The :module:`Dart` and :module:`FindDart` modules have been deprecated via
|
|
|
|
policy :policy:`CMP0145`. Port projects to the :module:`CTest` module.
|
|
|
|
|
|
|
|
* The :generator:`Visual Studio 9 2008` generator is now deprecated
|
|
|
|
and will be removed in a future version of CMake.
|
|
|
|
|
|
|
|
Other Changes
|
|
|
|
=============
|
|
|
|
|
|
|
|
* ``cmake --build $dir --verbose`` will now print the working directory and
|
|
|
|
command line used to perform the build.
|
|
|
|
|
|
|
|
* The :module:`ExternalProject` and :module:`FetchContent` modules
|
|
|
|
now resolve relative ``GIT_REPOSITORY`` paths as relative to the
|
|
|
|
parent project's remote, not as a relative local file system path.
|
|
|
|
See :policy:`CMP0150`.
|
|
|
|
|
|
|
|
* The :module:`ExternalProject` ``configure`` step no longer re-runs on
|
|
|
|
every build when the ``UPDATE_DISCONNECTED`` option is enabled.
|
|
|
|
It will only re-run if details of the ``download``, ``update``,
|
|
|
|
or ``patch`` step change.
|
|
|
|
|
|
|
|
* The :module:`ExternalProject` ``update`` and ``patch`` steps now always
|
|
|
|
re-run if any of their details change, even if the ``UPDATE_DISCONNECTED``
|
|
|
|
option is enabled. If using the ``GIT`` download method, and the ``GIT_TAG``
|
|
|
|
is changed to a commit that is not already known locally, an error is now
|
|
|
|
issued instead of silently using the previous ``GIT_TAG``.
|
|
|
|
|
|
|
|
* The :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3`
|
|
|
|
modules now support the Windows ARM64 platform.
|
|
|
|
|
|
|
|
* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command now case-preserves
|
|
|
|
DLL names reported on Windows. They are still converted to lowercase
|
|
|
|
for filter matching.
|
|
|
|
|
|
|
|
* The :prop_tgt:`SYSTEM` target property is now honored for Apple Frameworks.
|
|
|
|
|
|
|
|
* :ref:`Visual Studio Generators`, for VS 15.8 (2017) and newer, now
|
|
|
|
build custom commands in parallel. See policy :policy:`CMP0147`.
|
|
|
|
|
|
|
|
* :ref:`Visual Studio Generators` for VS 14 (2015) and above now prefer
|
|
|
|
to select the latest Windows SDK version. See policy :policy:`CMP0149`.
|
|
|
|
|
|
|
|
Updates
|
|
|
|
=======
|
|
|
|
|
|
|
|
Changes made since CMake 3.27.0 include the following.
|
|
|
|
|
|
|
|
3.27.1
|
|
|
|
------
|
|
|
|
|
|
|
|
* This version made no changes to documented features or interfaces.
|
|
|
|
Some implementation updates were made to support ecosystem changes
|
|
|
|
and/or fix regressions.
|
|
|
|
|
|
|
|
3.27.2
|
|
|
|
------
|
|
|
|
|
|
|
|
* :ref:`Visual Studio Generators` for VS 14 (2015) and above now prefer to
|
|
|
|
select the latest Windows SDK, as documented by policy :policy:`CMP0149`,
|
|
|
|
when targeting any version of Windows. In CMake 3.27.[0-1] the
|
|
|
|
preference was limited to targeting Windows 10 and above.
|
|
|
|
|
|
|
|
* :ref:`Visual Studio Generators` for VS 14 (2015) and above now support
|
|
|
|
using ``version=8.1`` in the :variable:`CMAKE_GENERATOR_PLATFORM` variable
|
|
|
|
to select the Windows 8.1 SDK. In CMake 3.27.[0-1] the ``version=`` field
|
|
|
|
was limited to selecting Windows 10 SDKs.
|
|
|
|
|
|
|
|
3.27.3, 3.27.4, 3.27.5, 3.27.6, 3.27.7, 3.27.8
|
|
|
|
----------------------------------------------
|
|
|
|
|
|
|
|
* These versions made no changes to documented features or interfaces.
|
|
|
|
Some implementation updates were made to support ecosystem changes
|
|
|
|
and/or fix regressions.
|
|
|
|
|
|
|
|
3.27.9
|
|
|
|
------
|
|
|
|
|
|
|
|
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
|
|
|
|
``fileSets`` field was introduced by CMake 3.26.0 with entries of its
|
|
|
|
``baseDirectories`` member incorrectly expressed as absolute paths
|
|
|
|
even if they are inside the top-level source directory. This was
|
|
|
|
fixed in CMake 3.26.6 and has now been fixed in 3.27.9. Clients must
|
|
|
|
be updated to expect relative paths under the top-level source directory.
|
|
|
|
|
|
|
|
* Fortran module dependency scanning in :ref:`Ninja Generators` was updated
|
|
|
|
by CMake 3.27.0 to use exact collation dependencies. This was supposed
|
|
|
|
to fix subtle rebuild failures when moving module sources among targets.
|
|
|
|
Since then, several cases have been found in which exact collation
|
|
|
|
dependencies were incorrectly computed when using :ref:`Object Libraries`.
|
|
|
|
Some of these cases were incrementally fixed through the 3.27.x patch
|
|
|
|
series, but additional more subtle cases have since been found. In order
|
|
|
|
to avoid further churn in the 3.27 release series, the original change has
|
|
|
|
been reverted and deferred to a future version of CMake.
|