CMake 3.4 Release Notes | |
*********************** | |
.. only:: html | |
.. contents:: | |
Changes made since CMake 3.3 include the following. | |
New Features | |
============ | |
Generators | |
---------- | |
* The :generator:`Visual Studio 14 2015` generator learned to select | |
a Windows 10 SDK based on the value of the :variable:`CMAKE_SYSTEM_VERSION` | |
variable and the SDKs available on the host. | |
* CMake learned rudimentary support for the Apple Swift language. When using | |
the :generator:`Xcode` generator with Xcode 6.1 or higher, one may enable | |
the ``Swift`` language with the :command:`enable_language` command or the | |
:command:`project` command (this is an error with other generators or when | |
Xcode is too old). Then one may list ``.swift`` source files in targets | |
for compilation. | |
Commands | |
-------- | |
* The :command:`find_program` command learned a ``NAMES_PER_DIR`` | |
option to consider all given ``NAMES`` in each directory before | |
moving on to the next directory. | |
* The :command:`get_filename_component` command learned a new ``BASE_DIR`` | |
subcommand. This is used to specify a base directory when calculating an | |
absolute path from a relative path. | |
* The :command:`if` command learned a new ``TEST`` operator that evaluates | |
to true if a given test name has been defined by the :command:`add_test` | |
command. See policy :policy:`CMP0064`. | |
* The :command:`install(DIRECTORY)` command ``DESTINATION`` option learned to | |
support :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
* The :command:`install(FILES)` command ``DESTINATION`` option learned to | |
support :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
* The :command:`string` command learned a new ``APPEND`` subcommand. | |
Variables | |
--------- | |
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator | |
learned to add compiler launcher tools like distcc and ccache along | |
with the compiler for ``C`` and ``CXX`` languages. See the | |
:variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and | |
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details. | |
* New :variable:`CMAKE_LINK_SEARCH_START_STATIC` and | |
:variable:`CMAKE_LINK_SEARCH_END_STATIC` variables were | |
introduced to initialize the | |
:prop_tgt:`LINK_SEARCH_START_STATIC` and | |
:prop_tgt:`LINK_SEARCH_END_STATIC` target properties, | |
respectively. | |
Properties | |
---------- | |
* :ref:`Visual Studio Generators` learned to support additonal | |
target properties to customize projects for NVIDIA Nsight | |
Tegra Visual Studio Edition: | |
* :prop_tgt:`ANDROID_ANT_ADDITIONAL_OPTIONS` | |
* :prop_tgt:`ANDROID_ARCH` | |
* :prop_tgt:`ANDROID_ASSETS_DIRECTORIES` | |
* :prop_tgt:`ANDROID_JAR_DEPENDENCIES` | |
* :prop_tgt:`ANDROID_JAR_DIRECTORIES` | |
* :prop_tgt:`ANDROID_JAVA_SOURCE_DIR` | |
* :prop_tgt:`ANDROID_NATIVE_LIB_DEPENDENCIES` | |
* :prop_tgt:`ANDROID_NATIVE_LIB_DIRECTORIES` | |
* :prop_tgt:`ANDROID_PROCESS_MAX` | |
* :prop_tgt:`ANDROID_PROGUARD` | |
* :prop_tgt:`ANDROID_PROGUARD_CONFIG_PATH` | |
* :prop_tgt:`ANDROID_SECURE_PROPS_PATH` | |
* :prop_tgt:`ANDROID_SKIP_ANT_STEP` | |
* :prop_tgt:`ANDROID_STL_TYPE` | |
* The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`, | |
:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`, and | |
:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target properties learned to | |
support :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
* The :prop_tgt:`SOURCE_DIR` and :prop_tgt:`BINARY_DIR` target properties | |
were introduced to allow project code to query where a target is defined. | |
* The :prop_tgt:`OUTPUT_NAME` target property and its variants learned to | |
support :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
* A :prop_gbl:`TARGET_MESSAGES` global property was added to tell the | |
:ref:`Makefile Generators` whether to generate commands to print output | |
after each target is completed. | |
* On Windows with MS-compatible tools, CMake learned to optionally | |
generate a module definition (``.def``) file for ``SHARED`` libraries. | |
See the :prop_tgt:`WINDOWS_EXPORT_ALL_SYMBOLS` target property. | |
Modules | |
------- | |
* The :module:`ExternalProject` module :command:`ExternalProject_Add` | |
function ``GIT_SUBMODULES`` option now also limits the set of | |
submodules that are initialized in addition to the prior behavior | |
of limiting the set of submodules that are updated. | |
* The :module:`ExternalProject` module learned new ``USES_TERMINAL`` | |
arguments for giving steps exclusive terminal access. This is | |
useful with the :generator:`Ninja` generator to monitor CMake | |
superbuild progress and prevent CPU oversubscription. | |
* The :module:`FindBISON` module ``BISON_TARGET`` macro learned a | |
new ``DEFINES_FILE`` option to specify a custom output header | |
to be generated. | |
* The :module:`FindHDF5` module learend a new ``HDF5_PREFER_PARALLEL`` | |
option allowing users to specify that a parallel HDF5 tool is | |
preferred if both are available. | |
* The :module:`FindIce` module now provides imported targets. | |
* The :module:`FindJava` module learned to optionally find | |
the ``idlj`` and ``jarsigner`` tools. | |
* The :module:`FindOpenSSL` module now provides imported targets. | |
* The :module:`FindOpenSSL` module learned a new ``OPENSSL_USE_STATIC_LIBS`` | |
option to search only for static libraries. | |
* The :module:`FindPkgConfig` learned a new :command:`pkg_get_variable` | |
command which may be used to query for arbitrary variables from a package | |
(such as for related tools or data and plugin install paths). | |
* The :module:`FindProtobuf` module gained a new | |
:command:`protobuf_generate_python` function to generate python | |
sources from ``.proto`` files. | |
* The :module:`FindTIFF` module learned to search separately for | |
debug and release variants. | |
* The :module:`FindwxWidgets` module learned to support version requests. | |
* The :module:`FindXercesC` module learned to search separately for | |
debug and release variants. | |
* The :module:`FindZLIB` module learned to search separately for | |
debug and release variants. | |
* The :module:`GNUInstallDirs` module learned special default values | |
for certain installation prefixes according to the `GNU Coding | |
Standards`_ and the `Filesystem Hierarchy Standard`_. | |
* The :module:`UseJava` module ``add_jar`` function learned | |
to support response files (e.g. ``@srcs.txt``) for source | |
specification. | |
* The :module:`UseJava` module ``install_jar`` function learned | |
new ``DESTINATION`` and ``COMPONENT`` options to specify | |
the corresponding :command:`install` command options. | |
* The :module:`UseJava` module gained a new ``create_javah`` | |
function to create C headers from Java classes. | |
.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html | |
.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html | |
Generator Expressions | |
--------------------- | |
* A new ``$<SHELL_PATH:...>`` | |
:manual:`generator expression <cmake-generator-expressions(7)>` | |
has been added. | |
CTest | |
----- | |
* CTest learned to optionally measure the CPU load during parallel | |
testing and avoid starting tests that may cause the load to exceed | |
a given threshold. See the :manual:`ctest(1)` command ``--test-load`` | |
option, the ``TestLoad`` setting of the :ref:`CTest Test Step`, | |
the :variable:`CTEST_TEST_LOAD` variable, and the ``TEST_LOAD`` | |
option of the :command:`ctest_test` command. | |
* :manual:`ctest(1)` learned options | |
``--test-output-size-passed`` and ``--test-output-size-failed`` | |
to customize the limit on test output size submitted when | |
running as a :ref:`Dashboard Client`. | |
CPack | |
----- | |
* The :module:`CPackDeb` module learned to set package dependencies | |
per component. See variables: | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES` | |
* :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS` | |
* The :module:`CPack` module learned to package empty directories. | |
* The :module:`CPack` module gained a new setting, ``CPACK_VERBATIM_VARIABLES``, | |
which can be used to ensure the cpack program receives the settings' values | |
exactly as they were set, even if they contain CMake-special characters. | |
For compatibility, it's off by default. | |
Other | |
----- | |
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality | |
is now aware of features supported by GNU C compilers on Windows. | |
* CMake learned to honor ``*.manifest`` source files with MSVC tools. | |
Manifest files named as sources of ``.exe`` and ``.dll`` targets | |
will be merged with linker-generated manifests and embedded in the | |
binary. | |
* The `Concurrent Fortran 77 <https://ccur.com>`__ compiler is now supported. | |
Its :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` is ``CCur``. | |
* :manual:`cmake(1)` gained a new ``--trace-expand`` command line option | |
that is like ``--trace`` but expands variable references in the output. | |
Deprecated and Removed Features | |
=============================== | |
* The :module:`CMakeExpandImportedTargets` module is now documented | |
as deprecated. See module documentation for an explanation. | |
* The :variable:`CMAKE_USE_RELATIVE_PATHS` variable no longer has any | |
effect. Previously it was partially implemented and unreliable. | |
Other Changes | |
============= | |
* The :module:`CheckFunctionExists`, :module:`CheckLibraryExists`, | |
:module:`CheckSymbolExists`, and :module:`FindThreads` modules learned to | |
work in environments where only CXX is enabled. | |
* The :module:`CPackDeb` module now correctly excludes symlinks during package | |
checksum calculation. | |
* The :module:`CPackDeb` no longer uses fakeroot and system tar program for | |
packaging. | |
* The :module:`CPack` module no longer mangles settings with CMake-special | |
characters when they're used as defaults for other settings. The macro | |
``cpack_set_if_not_set``, which was responsible for this, is now deprecated. | |
* CMake no longer links executables with flags to export symbols | |
unless the :prop_tgt:`ENABLE_EXPORTS` target property is set. | |
See policy :policy:`CMP0065`. | |
* The ``SONAME`` field is no longer set for ``MODULE`` libraries | |
created with the :command:`add_library` command. ``MODULE`` | |
libraries are meant for explicit dynamic loading at runtime. | |
They cannot be linked so ``SONAME`` is not useful. | |
* The internal :variable:`CMAKE_<LANG>_COMPILE_OBJECT` rule variable now | |
substitutes compiler include flags in a separate ``<INCLUDES>`` placeholder | |
instead of the main ``<FLAGS>`` placeholder. |