123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- 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:`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.
- * 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.
|