Help: Organize and revise 3.11 release notes

Add section headers similar to the 3.10 release notes and move each
individual bullet into an appropriate section.  Revise a few bullets.
This commit is contained in:
Brad King
2018-02-05 10:17:44 -05:00
parent 22ac06edb8
commit acbbccf704

View File

@@ -7,141 +7,52 @@ CMake 3.11 Release Notes
Changes made since CMake 3.10 include the following. Changes made since CMake 3.10 include the following.
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`, CMake starts multiple New Features
parallel ``moc`` or ``uic`` processes to reduce the build time. ============
The new :variable:`CMAKE_AUTOGEN_PARALLEL` variable and
:prop_tgt:`AUTOGEN_PARALLEL` target property allow to modify the number of
parallel ``moc`` or ``uic`` processes to start.
By default CMake starts a single ``moc`` or ``uic`` process for each physical
CPU on the host system.
* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to support Platforms
`FLAME <https://github.com/flame>`__ ``blis`` and ``libflame``. ---------
* Variables containing newlines in their values now get truncated before the * TI C/C++ compilers are now supported by the :generator:`Ninja` generator.
newline when they are written to the cache file. In addition, a warning
comment is written to the cache file, and a warning message is displayed to
the user on the console.
* The :module:`CheckIncludeFile` module ``check_include_file`` macro Generators
learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable. ----------
* The :module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro
learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
* The :module:`CheckIncludeFiles` module ``check_include_files`` macro
learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
* 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 :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)`.
* The :variable:`CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable was added
which serves the same purpose during packaging as the
:variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable serves during
installation (e.g. ``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 :manual:`cmake(1)` ``--open <dir>`` command line option can now
be used to open generated IDE projects like Visual Studio solutions
or Xcode projects.
* The :generator:`CodeBlocks` extra generator learned to check a * The :generator:`CodeBlocks` extra generator learned to check a
:variable:`CMAKE_CODEBLOCKS_COMPILER_ID` variable for a custom :variable:`CMAKE_CODEBLOCKS_COMPILER_ID` variable for a custom
compiler identification value to place in the project file. compiler identification value to place in the project file.
* The :module:`CPackIFW` module gained new
:variable:`CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR` variable to control
if the target directory should not be deleted when uninstalling.
* The :module:`CPackRPM` module learned to enable enforcing of execute
privileges on programs and shared libraries.
See :variable:`CPACK_RPM_INSTALL_WITH_EXEC` variable.
* :manual:`cpack(1)` gained ``--trace`` and ``--trace-expand`` options.
* 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.
* 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.
* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands
gained ``NETRC`` and ``NETRC_FILE`` options to specify use of a
``.netrc`` file.
* The :module:`ExternalProject` module gained ``NETRC`` and ``NETRC_FILE``
options to specify use of a ``.netrc`` file.
* 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.
* :command:`add_library` and :command:`add_executable` commands can now be
called without any sources and will not complain as long as sources will
be added later via :command:`target_sources`.
* 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 :command:`doxygen_add_docs` function of the :module:`FindDoxygen` module
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.
* :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)`.
* 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)`.
* The :module:`ExternalProject` module learnt to substitute ``<DOWNLOAD_DIR>``
in comments, commands, working directory and byproducts.
* 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.
* A :module:`FindIconv` module was added to locate iconv support.
* The :module:`FindOpenGL` module now prefers GLVND libraries if available.
See policy :policy:`CMP0072`.
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator learned * The :ref:`Makefile Generators` and the :generator:`Ninja` generator learned
to add compiler launcher tools along with the compiler for the ``Fortran`` to add compiler launcher tools along with the compiler for the ``Fortran``
language (``C``, ``CXX``, and ``CUDA`` were supported previously). language (``C``, ``CXX``, and ``CUDA`` were supported previously).
See the :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and See the :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details. :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 * The :command:`target_compile_definitions` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property on :prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property on
:ref:`Imported Targets`. :ref:`Imported Targets`.
@@ -162,14 +73,8 @@ Changes made since CMake 3.10 include the following.
* The :command:`target_link_libraries` command learned to set the * The :command:`target_link_libraries` command learned to set the
:prop_tgt:`INTERFACE_LINK_LIBRARIES` property on :ref:`Imported Targets`. :prop_tgt:`INTERFACE_LINK_LIBRARIES` property on :ref:`Imported Targets`.
* :ref:`Alias Targets` may now alias :ref:`Imported Targets` that are Variables
created with the ``GLOBAL`` option to :command:`add_library`. ---------
* The :module:`GenerateExportHeader` module learned an optional
``INCLUDE_GUARD_NAME`` parameter 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.
* A :variable:`CMAKE_GENERATOR_INSTANCE` variable was introduced * A :variable:`CMAKE_GENERATOR_INSTANCE` variable was introduced
to hold the selected instance of the generator's corresponding to hold the selected instance of the generator's corresponding
@@ -177,64 +82,197 @@ Changes made since CMake 3.10 include the following.
:generator:`Visual Studio 15 2017` generator to hold the :generator:`Visual Studio 15 2017` generator to hold the
selected instance of Visual Studio persistently. selected instance of Visual Studio persistently.
* Added new target-property :prop_tgt:`IMPORTED_GLOBAL` which * A :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable was added
indicates if an :ref:`IMPORTED target <Imported Targets>` is to enable setting of default permissions for directories created implicitly
globally visible. during installation of files by :command:`install` and
It will be set automatically if such an imported target is :command:`file(INSTALL)`, e.g. during ``make install``.
created with the ``GLOBAL`` flag.
* Additionally, it is now also possible to promote a local imported * A :variable:`CMAKE_JOB_POOLS` variable was added specify a value to use for
target to become globally visible by setting its the :prop_gbl:`JOB_POOLS` property. This enables control over build
:prop_tgt:`IMPORTED_GLOBAL` property to `TRUE`. (However, this parallelism with command line configuration parameters when using the Ninja
promotion can only succeed if it is done from within the same generator.
directory where the imported target was created in the first
place.) Setting it to `FALSE` is not supported!
* The minimum deployment target set in the * The :variable:`CMAKE_NETRC` and :variable:`CMAKE_NETRC_FILE` variables
:variable:`CMAKE_OSX_DEPLOYMENT_TARGET` variable used to be only were added to specify use of a ``.netrc`` file by the
applied for macOS regardless of the selected SDK. It is now properly :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands and
set for the target platform selected by :variable:`CMAKE_OSX_SYSROOT`. the :module:`ExternalProject` module.
If for example the sysroot variable specifies an iOS SDK then the * A :variable:`CMAKE_CUDA_SEPARABLE_COMPILATION` variable was added to
value in ``CMAKE_OSX_DEPLOYMENT_TARGET`` is interpreted as minimum initialize the :prop_tgt:`CUDA_SEPARABLE_COMPILATION` target property
iOS version. on targets when they are created.
* The ``KDevelop3`` generator has been removed. Properties
----------
* The :prop_sf:`COMPILE_DEFINITIONS` source file property learned to support * The :prop_sf:`COMPILE_DEFINITIONS` source file property learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`. :manual:`generator expressions <cmake-generator-expressions(7)>`.
* Source file learns new properties: * A :prop_sf:`COMPILE_OPTIONS` source file property was added to manage list
of options to pass to the compiler.
* A :prop_sf:`COMPILE_OPTIONS` source file property was added to manage list * An :prop_tgt:`IMPORTED_GLOBAL` target property was added to indicate
of options to pass to the compiler. 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 * An :prop_sf:`INCLUDE_DIRECTORIES` source file property was added to specify
list of preprocessor include file search directories. list of preprocessor include file search directories.
* TI C/C++ compilers are now supported by the :generator:`Ninja` generator.
* | The command add_jar from :module:`UseJava` module learns how to generate native
headers files using option -h of javac tool.
| This capability requires, at least, version 1.8 of Javac tool.
| Command create_javah will no longer be supported due to the
`suppression of javah tool <http://openjdk.java.net/jeps/313>`_ in the version 1.10
of the JDK, so ``add_jar(GENERATE_NATIVE_HEADERS)`` must be used instead.
* Source file properties :prop_sf:`VS_SHADER_DISABLE_OPTIMIZATIONS` and * Source file properties :prop_sf:`VS_SHADER_DISABLE_OPTIMIZATIONS` and
:prop_sf:`VS_SHADER_ENABLE_DEBUG` have been added to specify more :prop_sf:`VS_SHADER_ENABLE_DEBUG` have been added to specify more
details of ``.hlsl`` sources with :ref:`Visual Studio Generators`. details of ``.hlsl`` sources with :ref:`Visual Studio Generators`.
* ``INTERFACE`` libraries may now have custom properties set on them if they Modules
start with either an underscore (``_``) or a lowercase ASCII character. The -------
original intention was to only allow properties which made sense for
* The :module:`CheckIncludeFile` module ``check_include_file`` macro
learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
* The :module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro
learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
* The :module:`CheckIncludeFiles` module ``check_include_files`` macro
learned to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable.
* 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 :module:`CPackIFW` module gained new
:variable:`CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR` variable to control
if the target directory should not be deleted when uninstalling.
* The :module:`CPackRPM` module 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. ``INTERFACE`` libraries, but it also blocked usage of custom properties.
* The :command:`write_basic_package_version_file` understands a new * The :manual:`cmake(1)` ``--open <dir>`` command-line option was added
``SameMinorVersion`` option for the ``COMPATIBILITY`` argument. 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 * The :generator:`Xcode` generator behavior of generating one project
file per :command:`project()` command could now be controlled with the file per :command:`project()` command may now be controlled with the
:variable:`CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY` variable. :variable:`CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY` variable.
This could be useful to speed up the CMake generation step for 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. 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.