123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- 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 ``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 :module:`CPackArchive` module 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 :module:`CPackIFW` module learned the new hint :variable:`CPACK_IFW_ROOT`
- variable for finding the QtIFW tool suite installed in a non-standard place.
- * The :module:`CPackProductBuild` module gained a new
- :variable:`CPACK_PRODUCTBUILD_RESOURCES_DIR` variable to
- specify resources to be copied into the ``Resources``
- directory.
- * The :module:`CPackRPM` module learned to modify the ``debuginfo`` package
- name. See the :variable:`CPACK_RPM_DEBUGINFO_FILE_NAME` variable.
- * The :module:`CPackWIX` module 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 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.
|