123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- CMake 3.3 Release Notes
- ***********************
- .. only:: html
- .. contents::
- Changes made since CMake 3.2 include the following.
- New Features
- ============
- Generators
- ----------
- * The :ref:`Makefile Generators` now add ``.DELETE_ON_ERROR`` to the
- makefiles that contain the actual build rules for files on disk.
- This tells GNU make to remove rule outputs when their recipe
- modifies an output but fails.
- * The :ref:`Visual Studio Generators` learned to support ``.xaml``
- source files and automatically associate them with corresponding
- ``.h`` and ``.cpp`` sources.
- * A new experimental :generator:`Green Hills MULTI` generator was
- added on Windows. `Green Hills MULTI`_ is an IDE for embedded
- real-time systems.
- .. _`Green Hills MULTI`: http://www.ghs.com/products/MULTI_IDE.html
- Commands
- --------
- * The :command:`add_dependencies` command learned to allow dependencies
- to be added to :ref:`interface libraries <Interface Libraries>`.
- Dependencies added to an interface library are followed transitively
- in its place since the target itself does not build.
- * The :command:`execute_process` command learned to support specifying
- the same file for ``OUTPUT_FILE`` and ``ERROR_FILE``.
- * The :command:`file(GLOB)` and :command:`file(GLOB_RECURSE)` commands
- learned a new ``LIST_DIRECTORIES <bool>`` option to specify whether
- the glob result should include directories.
- * The :command:`find_library`, :command:`find_path`, and :command:`find_file`
- commands now search in installation prefixes derived from the ``PATH``
- environment variable.
- * The :command:`if` command learned a new ``IN_LIST`` operator that
- evaluates to true if a given element is contained in a named list.
- * The :command:`install(EXPORT)` and :command:`export()` commands
- learned to export targets that populate the :prop_tgt:`INTERFACE_SOURCES`
- target property.
- * The :command:`install(TARGETS)` command learned to support
- generator expressions in the ``DESTINATION`` value.
- Variables
- ---------
- * The version of some Fortran compilers is now detected and stored in the
- :variable:`CMAKE_Fortran_COMPILER_VERSION <CMAKE_<LANG>_COMPILER_VERSION>`
- variable.
- * The :ref:`Visual Studio Generators` learned a new
- :variable:`CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD` option
- to put the ``INSTALL`` target in the default build of a
- solution (``.sln``) file.
- Properties
- ----------
- * A :prop_tgt:`CROSSCOMPILING_EMULATOR` target property and supporting
- :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable were introduced
- to allow target platform binaries to run on the host during cross
- compiling.
- * A :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE` target property and supporting
- :variable:`CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE` variable were introduced
- to tell the :ref:`Makefile Generators` and the :generator:`Ninja` generator
- to run ``include-what-you-use`` along with the compiler for ``C`` and
- ``CXX`` languages.
- * The :prop_tgt:`<LANG>_VISIBILITY_PRESET` and
- :prop_tgt:`VISIBILITY_INLINES_HIDDEN` target properties now
- affect compilation in sources of all target types. See
- policy :policy:`CMP0063`.
- * The :prop_tgt:`XCODE_ATTRIBUTE_<an-attribute>` target property learned
- to support generator expressions.
- Modules
- -------
- * The :module:`CheckFortranCompilerFlag` module was introduced
- to check ``Fortran`` compiler flags, much like the
- :module:`CheckCCompilerFlag` module already does for ``C``.
- * The :module:`ExternalData` module learned a new
- :variable:`ExternalData_NO_SYMLINKS` option to disable use of
- symbolic links to populate the real data files and use copies
- instead.
- * The :module:`ExternalData` module learned a new ``RECURSE:``
- option in ``DATA{}`` references specifying directories.
- This allows an entire directory tree of associated files
- to be matched.
- * The :module:`ExternalData` module learned a new URL template
- placeholder ``%(algo:<key>)`` to allow custom mapping from
- algorithm name to URL component through configuration of new
- :variable:`ExternalData_URL_ALGO_<algo>_<key>` variables.
- This allows more flexibility in remote URLs.
- * The :module:`ExternalProject` module learned to replace tokens
- like ``<BINARY_DIR>`` in the ``BYPRODUCTS`` of each step.
- * The :module:`ExternalProject` module APIs learned to support
- :manual:`generator expressions <cmake-generator-expressions(7)>`
- when using ``LOG_*`` options and in CMake initial cache options.
- * The :module:`FindBoost` module now tracks the directories containing
- libraries separately for RELEASE and DEBUG configurations.
- * The :module:`FindCUDA` module now defaults to using the static
- CUDA runtime library if it is available. A new
- ``CUDA_USE_STATIC_CUDA_RUNTIME`` option is offered to control
- this behavior.
- * The :module:`FindMatlab` module was completely rewritten. It learned
- about versions and components and to find Matlab in a more precise and
- multiplatform way. The module now offers APIs to create mex extensions,
- documentation, and unit tests.
- * The :module:`FindPackageHandleStandardArgs` module
- ``FIND_PACKAGE_HANDLE_STANDARD_ARGS`` function now
- always populates both the ``<PackageName>_FOUND``
- and ``<UPPERCASE_NAME>_FOUND`` variables (the latter
- for backwards compatibility). The ``FOUND_VAR``
- option is now ignored except to enforce its allowed
- values.
- * The :module:`InstallRequiredSystemLibraries` module learned a new
- ``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT`` option to specify the
- installation component.
- Generator Expressions
- ---------------------
- * A new ``COMPILE_LANGUAGE`` generator expression was introduced to
- allow specification of compile options for target files based on the
- :prop_sf:`LANGUAGE` of each source file. Due to limitations of the
- underlying native build tools, this feature has varying support across
- generators. See the :manual:`cmake-generator-expressions(7)` manual
- for details.
- CTest
- -----
- * The :manual:`ctest(1)` tool learned a new ``--repeat-until-fail <n>``
- option to help find sporadic test failures.
- * The :module:`CTestCoverageCollectGCOV` module learned to support
- the same ``CTEST_CUSTOM_COVERAGE_EXCLUDE`` option as the
- :command:`ctest_coverage` command.
- CPack
- -----
- * The :manual:`cpack(1)` ``IFW`` generator and the :module:`CPackIFW`
- module learned to support Qt Framework Installer 2.0 tools.
- * The :module:`CPackDeb` module learned a new
- :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
- variable to specify per-component use of ``dpkg-shlibdeps``.
- * The :module:`CPackDeb` module learned a new
- :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS`
- option to specify per-component dependencies.
- * The :module:`CPackRPM` module learned to package symbolic links
- more cleanly and now supports directory symlinks with recent
- ``rpmbuild`` versions.
- * The :module:`CPackRPM` module learned a new
- :variable:`CPACK_RPM_ADDITIONAL_MAN_DIRS` variable to specify
- directories containing man pages for the brp-compress RPM macro.
- * The :module:`CPackRPM` module learned a new
- :variable:`CPACK_RPM_<component>_PACKAGE_ARCHITECTURE` variable
- to specify a component-specific package architecture.
- * The CPack WIX generator learned the new
- :prop_inst:`CPACK_START_MENU_SHORTCUTS`,
- :prop_inst:`CPACK_DESKTOP_SHORTCUTS` and
- :prop_inst:`CPACK_STARTUP_SHORTCUTS` installed file properties which can
- be used to install shorcuts in the Start Menu, on the Desktop and
- in the Startup Folder respectively.
- Other
- -----
- * The :manual:`Compile Features <cmake-compile-features(7)>` functionality
- is now aware of features supported by GNU compilers on Windows, versions
- 4.4 through 5.0.
- * The :manual:`cmake(1)` ``-E tar`` command learned a new
- ``--format<format>`` option to specify the archive format to
- be written.
- * On OS X, CMake learned to create XCTest bundles to test Frameworks
- and App Bundles within Xcode. The :module:`FindXCTest` module
- provides convenience functions to handle :prop_tgt:`XCTEST` bundles.
- Deprecated and Removed Features
- ===============================
- * On OS X the :manual:`cmake-gui(1)` no longer has the
- ``Install For Command Line Use`` menu item. Instead there
- is a ``How to Install For Command Line Use`` menu item
- that shows an informational dialog box explaining how to
- make the command line tools available. For example::
- /Applications/CMake.app/Contents/bin/cmake-gui --install
- * The :command:`ctest_build` and :command:`build_command` commands
- no longer tell ``make`` tools to ignore errors with the ``-i`` option.
- Previously this was done for :ref:`Makefile Generators` but not others.
- See policy :policy:`CMP0061`.
- * The :generator:`Visual Studio 10 2010` generator no longer checks
- for running VS IDEs with the project open or asks them to reload.
- This was originally done for VS 10 because it had been done for
- VS 7 through 9 to avoid prompting for every project in a solution.
- Since VS >= 10 allow the whole solution to reload at once they
- do not need CMake to help them.
- * The :generator:`Visual Studio 7` generator (.NET 2002) is now
- deprecated and will be removed in a future version of CMake.
- * The :generator:`Visual Studio 6` generator is now deprecated
- and will be removed in a future version of CMake.
- * The :command:`find_package` command no longer considers project
- build trees recently configured in a :manual:`cmake-gui(1)`.
- This was previously done only on Windows and is now never done.
- The ``NO_CMAKE_BUILDS_PATH`` option is now ignored if given
- and effectively always on.
- Projects may populate the :ref:`User Package Registry` to aid
- users building multiple dependent projects one after another.
- * The :command:`add_definitions()` command no longer causes a
- :prop_dir:`DEFINITIONS` directory property to be populated. See policy
- :policy:`CMP0059`.
- * With Visual Studio 7, 8, and 9 generators the value of the ``$(OutDir)``
- placeholder no longer evaluates to the configuration name. Projects
- should use ``$(ConfigurationName)`` for that instead.
- * Using the output of :command:`export()` with the :command:`install(FILES)`
- command is no longer allowed. See policy :policy:`CMP0062` for details.
- Other Changes
- =============
- * The :generator:`Ninja` generator now requires that calls to the
- :command:`add_custom_command` and :command:`add_custom_target`
- commands use the ``BYPRODUCTS`` option to explicitly specify any
- files generated by the custom commands that are not listed as
- outputs (perhaps because their timestamps are allowed to be older
- than the inputs). See policy :policy:`CMP0058`.
- * Build-time progress output of :ref:`Makefile Generators` has been improved.
- It no longer mixes progress and build rule messages during parallel builds.
- The link rule messages now have progress and are displayed as bold green
- instead of bold red (since red is often associated with an error message).
- * The :variable:`CMAKE_CFG_INTDIR` variable value for Visual Studio
- 7, 8, and 9 is now ``$(ConfigurationName)`` instead of ``$(OutDir)``.
- This should have no effect on the intended use cases of the variable.
- * Linking to library files by a full path in an implicit linker search
- directory (e.g. ``/usr/lib/libfoo.a``) no longer asks the linker to
- search for the library (e.g. ``-lfoo``) and now links by full path.
- See policy :policy:`CMP0060`.
|