|
|
@@ -7,30 +7,26 @@ CMake 3.16 Release Notes
|
|
|
|
|
|
Changes made since CMake 3.15 include the following.
|
|
|
|
|
|
-* The :command:`find_package` command has learned to check the following
|
|
|
- variables to control searching
|
|
|
+New Features
|
|
|
+============
|
|
|
|
|
|
- * :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` - Controls the searching the
|
|
|
- cmake user registry.
|
|
|
+Languages
|
|
|
+---------
|
|
|
|
|
|
-* The :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` has been deprecated.
|
|
|
- Instead use :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY`
|
|
|
+* 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.
|
|
|
|
|
|
-* A new target property, :prop_tgt:`INSTALL_REMOVE_ENVIRONMENT_RPATH`, was
|
|
|
- added which removes compiler-defined rpaths from a target. This property is
|
|
|
- initialized by :variable:`CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH`.
|
|
|
+Compilers
|
|
|
+---------
|
|
|
|
|
|
-* 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`.
|
|
|
+* The ``Clang`` compiler is now supported on ``Solaris``.
|
|
|
|
|
|
-* The command :command:`add_test` learned the option ``COMMAND_EXPAND_LISTS``
|
|
|
- which causes lists in the ``COMMAND`` argument to be expanded, including
|
|
|
- lists created by generator expressions.
|
|
|
+Platforms
|
|
|
+---------
|
|
|
|
|
|
* On AIX, executables using the :prop_tgt:`ENABLE_EXPORTS` target property
|
|
|
now produce a linker import file with a ``.imp`` extension in addition
|
|
|
@@ -50,97 +46,27 @@ Changes made since CMake 3.15 include the following.
|
|
|
``-Wl,-brtl`` to their link flags (e.g. in the
|
|
|
:variable:`CMAKE_EXE_LINKER_FLAGS` variable).
|
|
|
|
|
|
-* 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.
|
|
|
-
|
|
|
-* :prop_tgt:`BUILD_RPATH` and :prop_tgt:`INSTALL_RPATH` now support
|
|
|
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
|
|
|
-
|
|
|
-* :manual:`cmake(1)` ``-E`` now supports ``true`` and ``false`` commands, which
|
|
|
- do nothing while returning exit codes of 0 and 1, respectively.
|
|
|
-
|
|
|
-* 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 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 intermediary CMake install script.
|
|
|
- See policy :policy:`CMP0095`.
|
|
|
+Command-Line
|
|
|
+------------
|
|
|
|
|
|
-* CPack learned :variable:`CPACK_INSTALL_CMAKE_CONFIGURATIONS` to control
|
|
|
- what configurations going to be packaged for multi-configuration generators.
|
|
|
+* :manual:`cmake(1)` ``-E`` now supports ``true`` and ``false`` commands,
|
|
|
+ which do nothing while returning exit codes of 0 and 1, respectively.
|
|
|
|
|
|
-* The ``CPACK_INSTALL_SCRIPT`` variable has been deprecated in favor of the
|
|
|
- new, more accurately named :variable:`CPACK_INSTALL_SCRIPTS` variable.
|
|
|
-
|
|
|
-* The :cpack_gen:`CPack Archive Generator` learned to generate `.tar.zst`
|
|
|
- packages with Zstandard compression.
|
|
|
-
|
|
|
-* :manual:`ctest(1)` ``--build-makeprogram`` now specifies the make program
|
|
|
- used when configuring a project with the Ninja and Makefiles generators
|
|
|
- in addition to building it.
|
|
|
-
|
|
|
-* :manual:`ctest(1)` now has the ability to serialize tests based on hardware
|
|
|
- requirements for each test. See :ref:`ctest-hardware-allocation` for
|
|
|
- details.
|
|
|
-
|
|
|
-* Variable :variable:`CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS` has been
|
|
|
- introduced to optionally initialize the
|
|
|
- :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target property.
|
|
|
-
|
|
|
-* 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 :command:`doxygen_add_docs` command from the :module:`FindDoxygen`
|
|
|
- module 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 :generator:`Eclipse CDT4` extra generator gained a new
|
|
|
- :variable:`CMAKE_ECLIPSE_RESOURCE_ENCODING` option to specify
|
|
|
- the resource encoding.
|
|
|
-
|
|
|
-* The :module:`ExternalProject` module's ``ExternalProject_Add`` command
|
|
|
- has been updated so that ``GIT_SUBMODULES ""`` initializes no submodules. See
|
|
|
- policy :policy:`CMP0097`.
|
|
|
-
|
|
|
-* The :module:`FindGnuTLS` module now provides an imported target.
|
|
|
-
|
|
|
-* The :module:`FindPkgConfig` module :command:`pkg_search_module` macro
|
|
|
- now defines a ``<prefix>_MODULE_NAME`` result variable containing the
|
|
|
- first matching module name.
|
|
|
-
|
|
|
-* Modules :module:`FindPython3` and :module:`FindPython` gain the capability
|
|
|
- to control which ``ABIs`` will be searched.
|
|
|
+* :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``.
|
|
|
|
|
|
-* Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
|
|
|
- gain the capability to specify directly artifacts.
|
|
|
+Commands
|
|
|
+--------
|
|
|
|
|
|
-* Modules :module:`FindPackageHandleStandardArgs` gains the capability to
|
|
|
- specify a message giving the reason for the failure.
|
|
|
+* 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 :module:`GetPrerequisites` module has been deprecated, as it has been
|
|
|
- superceded by :command:`file(GET_RUNTIME_DEPENDENCIES)`.
|
|
|
|
|
|
* The :command:`find_file`, :command:`find_library`, :command:`find_path`,
|
|
|
:command:`find_package`, and :command:`find_program` commands have learned to
|
|
|
@@ -161,59 +87,176 @@ Changes made since CMake 3.15 include the following.
|
|
|
* :variable:`CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH` - Controls the searching
|
|
|
the standard system environment variables.
|
|
|
|
|
|
-* The :module:`FindGTest` module has been updated to recognize
|
|
|
- MSVC build trees generated by GTest 1.8.1.
|
|
|
+* The :command:`find_package` command has learned to check the following
|
|
|
+ variables to control searching
|
|
|
+
|
|
|
+ * :variable:`CMAKE_FIND_USE_PACKAGE_REGISTRY` - Controls the searching the
|
|
|
+ cmake user registry.
|
|
|
|
|
|
* The :command:`message` command learned indentation control with the new
|
|
|
:variable:`CMAKE_MESSAGE_INDENT` variable.
|
|
|
|
|
|
-* 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.
|
|
|
+* The :command:`target_precompile_headers` command was added to specify
|
|
|
+ a list of headers to precompile for faster compilation times.
|
|
|
|
|
|
-* New variables :variable:`CMAKE_<LANG>_LINK_LIBRARY_FLAG`,
|
|
|
- :variable:`CMAKE_<LANG>_LINK_LIBRARY_FILE_FLAG`, and
|
|
|
- :variable:`CMAKE_<LANG>_LINK_LIBRARY_SUFFIX` allow control of the
|
|
|
- flag used to specify linking to a library on a per-language basis.
|
|
|
- This is useful for mixed-language projects where the different
|
|
|
- drivers may use different flags.
|
|
|
+Variables
|
|
|
+---------
|
|
|
|
|
|
-* The :prop_tgt:`PRECOMPILE_HEADERS` target property was added to tell
|
|
|
- generators to use a list of precompile headers for faster compilation
|
|
|
- times.
|
|
|
+* The :variable:`CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS` variable has been
|
|
|
+ introduced to optionally initialize the
|
|
|
+ :prop_tgt:`CUDA_RESOLVE_DEVICE_SYMBOLS` target property.
|
|
|
|
|
|
-* The :command:`project` no longer strips leading zeros in version components.
|
|
|
- See policy :policy:`CMP0096`.
|
|
|
+* The :variable:`CMAKE_ECLIPSE_RESOURCE_ENCODING` variable was added to
|
|
|
+ specify the resource encoding for the the :generator:`Eclipse CDT4` extra
|
|
|
+ generator.
|
|
|
|
|
|
-* 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.
|
|
|
+Properties
|
|
|
+----------
|
|
|
|
|
|
-* The ``Clang`` compiler is now supported on ``Solaris``.
|
|
|
+* The :prop_tgt:`BUILD_RPATH` and :prop_tgt:`INSTALL_RPATH` target properties
|
|
|
+ now support :manual:`generator expressions <cmake-generator-expressions(7)>`.
|
|
|
|
|
|
-* :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 :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.
|
|
|
|
|
|
-* :prop_tgt:`VS_CONFIGURATION_TYPE` now supports
|
|
|
+* 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.
|
|
|
|
|
|
-* On Windows, existing auto generated exports are now only updated if the
|
|
|
- modified time stamp of the exports is not newer than any modified time stamp
|
|
|
- of the input 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 serialize tests based on hardware
|
|
|
+ requirements for each test. See :ref:`ctest-hardware-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
|
|
|
+-----
|
|
|
+
|
|
|
+* CPack variable :variable:`CPACK_INSTALL_CMAKE_CONFIGURATIONS` was added to
|
|
|
+ control what configurations are to be packaged for multi-configuration
|
|
|
+ CMake generators.
|
|
|
+
|
|
|
+* The :cpack_gen:`CPack Archive Generator` learned to generate ``.tar.zst``
|
|
|
+ packages with Zstandard compression.
|
|
|
+
|
|
|
+Deprecated and Removed Features
|
|
|
+===============================
|
|
|
+
|
|
|
+* An explicit deprecation diagnostic was added for policy ``CMP0067``
|
|
|
+ (``CMP0066`` and below were already deprecated).
|
|
|
+ The :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`.
|
|
|
|
|
|
-* The Xcode generator learnt to set the value of the
|
|
|
- ``Allow debugging when using document Versions Browser`` schema
|
|
|
- option with the :prop_tgt:`XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING`
|
|
|
- target property.
|
|
|
+* 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.
|