summaryrefslogtreecommitdiff
path: root/Help/release/3.4.rst
blob: 89c5561d309dacdcbb991fb468ba490de061ddba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
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.