mirror of
https://github.com/reactos/CMake.git
synced 2024-12-05 02:06:34 +00:00
9ecee256f8
The change in commit v3.9.0~3^2 (Xcode: Add "outputPaths" to custom command script build phase, 2017-07-13) was meant to support Xcode 9's new build system. However, without matching "inputPaths", Xcode will not re-run the build phase if its outputs have already been generated. This broke the old Xcode build system too. Revert the change for now so at least the old Xcode build system works. Further investigation will be needed to add proper support for Xcode 9's new build system. Fixes: #17178
343 lines
14 KiB
ReStructuredText
343 lines
14 KiB
ReStructuredText
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.
|