Forked from
CMake / CMake
21092 commits behind the upstream repository.
3.17.rst 13.84 KiB
CMake 3.17 Release Notes
Changes made since CMake 3.16 include the following.
New Features
Generators
- :manual:`cmake(1)` gained a :generator:`Ninja Multi-Config` generator, which is similar to the :generator:`Ninja` generator but can be used to build multiple configurations at once.
- :ref:`Visual Studio Generators` learned to support per-config sources. Previously only :ref:`Command-Line Build Tool Generators` supported them.
- :ref:`Visual Studio Generators` for VS 2010 and above now support
specifying the
VCTargetsPath
value for project files in :variable:`CMAKE_GENERATOR_TOOLSET` setting. - :ref:`Visual Studio Generators` for VS 2010 and above learned to support .NET Standard and .NET Core. See the :prop_tgt:`DOTNET_TARGET_FRAMEWORK` target property and associated :variable:`CMAKE_DOTNET_TARGET_FRAMEWORK` variable.
Languages
- The :manual:`Compile Features <cmake-compile-features(7)>` functionality
now offers meta-features for the CUDA language standard levels
(e.g.
cuda_std_03
,cuda_std_14
). See :prop_gbl:`CMAKE_CUDA_KNOWN_FEATURES`.
Compilers
- The IBM XL Fortran compiler is now supported by the :generator:`Ninja` generator.
Command-Line
- :manual:`cmake(1)` gained a
--debug-find
command-line option to enable additional human-readable output on wherefind_*
commands search. - :manual:`cmake(1)` gained a
--trace-format
command-line option that can be used to set the--trace
output format. Currently, the old human readable and the new JSON format are supported. The new JSON format is easier to parse automatically than the existing format. - :manual:`cmake(1)` gained a
-E rm
command-line tool that can be used to remove directories and files. This supersedes the existing-E remove
and-E remove_directory
tools and has better semantics.
Commands
- The :command:`add_custom_command` command learned to interpret paths in
DEPENDS
arguments that are specified relative to the current binary directory. - The :command:`foreach` command learned a new
ZIP_LISTS
option to iterate over multiple lists simultaneously. - The :command:`load_cache(READ_WITH_PREFIX)` command mode is now allowed
when using
cmake -P
to :ref:`Run a Script <Script Processing Mode>`. - The :command:`message` command learned to output context provided in
the :variable:`CMAKE_MESSAGE_CONTEXT` variable for log levels
NOTICE
and below. Enable this output with the new--log-context
command-line option or :variable:`CMAKE_MESSAGE_CONTEXT_SHOW` variable. - The :command:`message` command gained new keywords
CHECK_START
,CHECK_PASS
andCHECK_FAIL
. - The :command:`target_compile_options` command now honors the
BEFORE
keyword more consistently. See policy :policy:`CMP0101`.
Variables
- A :variable:`CMAKE_CTEST_ARGUMENTS` variable was added to specify a list
of command-line arguments passed to CTest when running through the
test
(orRUN_TESTS
) target of the generated build system. - The following variables are now defined inside a :command:`function`:
- :variable:`CMAKE_CURRENT_FUNCTION`
- :variable:`CMAKE_CURRENT_FUNCTION_LIST_DIR`
- :variable:`CMAKE_CURRENT_FUNCTION_LIST_FILE`
- :variable:`CMAKE_CURRENT_FUNCTION_LIST_LINE`
- The :variable:`CMAKE_CUDA_RUNTIME_LIBRARY` variable and :prop_tgt:`CUDA_RUNTIME_LIBRARY` target property were introduced to select the CUDA runtime library used when linking targets that use CUDA.
- The :variable:`CMAKE_FIND_DEBUG_MODE` variable was introduced to
print extra
find_*
call information during the cmake run to standard error. Output is designed for human consumption and not for parsing. - The :variable:`CMAKE_EXPORT_COMPILE_COMMANDS` variable now takes its initial value from the :envvar:`CMAKE_EXPORT_COMPILE_COMMANDS` environment variable if no explicit configuration is given.
- The :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable, if not set explicitly, now takes its initial value from the :envvar:`CMAKE_<LANG>_COMPILER_LAUNCHER` environment variable.
- The :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable can now be used
to persist a log level between CMake runs, unlike the
--log-level
command line option which only applies to that particular run. - The :variable:`CMAKE_XCODE_SCHEME_ENVIRONMENT` variable was added to initialize the :prop_tgt:`XCODE_SCHEME_ENVIRONMENT` target property.
- The :variable:`CMAKE_XCODE_SCHEME_WORKING_DIRECTORY` variable and
associated :prop_tgt:`XCODE_SCHEME_WORKING_DIRECTORY` target property
were added to tell the :generator:`Xcode` generator to set the value of
the
Custom Working Directory
schema option.
Properties
- The :prop_tgt:`AIX_EXPORT_ALL_SYMBOLS` target property and associated :variable:`CMAKE_AIX_EXPORT_ALL_SYMBOLS` variable were created to optionally explicitly disable automatic export of symbols from shared libraries on AIX.
- The :prop_tgt:`DEPRECATION` target property was added to mark a target as deprecated. If a linked target is marked as deprecated, a warning with the deprecation message is issued at generate time.
- The :prop_tgt:`INSTALL_NAME_DIR` target property now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
In particular, the
$<INSTALL_PREFIX>
generator expression can be used to set the directory relative to the install-time prefix. - Target properties :prop_tgt:`MACHO_COMPATIBILITY_VERSION` and
:prop_tgt:`MACHO_CURRENT_VERSION` were added to set the
compatibility_version
andcurent_version
, respectively, for Mach-O binaries. For backwards compatibility, if these properties are not set, :prop_tgt:`SOVERSION` and :prop_tgt:`VERSION` are used respectively as fallbacks. - The :prop_tgt:`VS_DOTNET_DOCUMENTATION_FILE` target property was added
to tell :ref:`Visual Studio Generators` to generate a
DocumentationFile
reference in.csproj
files.
Modules
- The :module:`ExternalProject` module :command:`ExternalProject_Add`
command gained a
GIT_SUBMODULES_RECURSE
option to specify whether Git submodules should be updated recursively. The default is on to preserve existing behavior. - The :module:`FindCUDAToolkit` module was added to find the CUDA Toolkit without enabling CUDA as a language.
- The :module:`FindCURL` module learned to find CURL using
the
CURLConfig.cmake
package configuration file generated by CURL's cmake buildsystem. It also gained a newCURL_NO_CURL_CMAKE
option to disable this behavior. - The :module:`FindFLEX` module's
FLEX_TARGET
command now runsflex
with :variable:`CMAKE_CURRENT_BINARY_DIR` as the working directory. See policy :policy:`CMP0098`. - The :module:`FindLibArchive` module now provides an imported target for libarchive.
- The :module:`FindPython` module has learned to find Python components
in active virtual environments managed by
conda
. - The :module:`FindPython3` and :module:`FindPython` modules gained,
respectively, variable
Python3_SOABI
andPython_SOABI
giving the standard extension suffix for modules. Moreover, commandsPython3_add_library()
andPython_add_library()
gained the optionWITH_SOABI
to prefix the library suffix with the value ofSOABI
. - The :module:`FindLibXml2` module now provides an imported target for the
xmllint
executable.
Autogen
- :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` learned to process headers
with a
.hh
extension. See policy :policy:`CMP0100`.
CTest
- The :variable:`CTEST_CONFIGURATION_TYPE` variable is now set from the
command line when :manual:`ctest(1)` is invoked with
-C <cfg>
. - The :manual:`ctest(1)` tool gained support for Dr. Memory to run memcheck runs.
- The :manual:`ctest(1)` tool gained a
--no-tests=<[error|ignore]>
option to explicitly set and unify the behavior between direct invocation and script mode if no tests were found. - The :manual:`ctest(1)` tool gained a
--repeat <mode>:<n>
option to specify conditions in which to repeat tests. This generalizes the existing--repeat-until-fail <n>
option to add modes foruntil-pass
andafter-timeout
. - The :command:`ctest_test` command gained a
REPEAT <mode>:<n>
option to specify conditions in which to repeat tests.
CPack
- The :cpack_gen:`CPack DragNDrop Generator` learned to use the :variable:`CPACK_DMG_<component>_FILE_NAME` variable to set a custom filename when packaging components into their own DMGs.
- The :cpack_gen:`CPack DragNDrop Generator` learned to handle
RTF formatted license files. When :variable:`CPACK_DMG_SLA_DIR`
variable is set,
<language>.license.rtf
is considered, but only as a fallback when the plaintext (.txt
) file is not found in order to maintain backwards compatibility. - The :cpack_gen:`CPack NSIS Generator` gained a new variable :variable:`CPACK_NSIS_MUI_HEADERIMAGE` to set the header image. To not break existing setups, it still defaults to :variable:`CPACK_PACKAGE_ICON` if the new variable is not set.
- The :cpack_gen:`CPack NSIS Generator` now supports :variable:`CPACK_NSIS_UNINSTALL_NAME`. This can be used to specify the name of the Uninstall program.
- The :cpack_gen:`CPack NSIS Generator` now supports :variable:`CPACK_NSIS_WELCOME_TITLE` and :variable:`CPACK_NSIS_WELCOME_TITLE_3LINES`. These can be used to specify the welcome page title and display it in 3 lines.
- The :cpack_gen:`CPack NSIS Generator` now supports :variable:`CPACK_NSIS_FINISH_TITLE` and :variable:`CPACK_NSIS_FINISH_TITLE_3LINES`. These can be used to specify the finish page title and display it in 3 lines.
- The :cpack_gen:`CPack productbuild Generator` gained support for a :variable:`CPACK_PRODUCTBUILD_BACKGROUND` variable to specify a background image for the macOS installer.
Other
- :manual:`ccmake(1)` now displays cache values using colors based on the entry type if the terminal supports color.
- :manual:`ccmake(1)` now displays messages and a progress bar during configure and generate. It will keep the output displayed if any errors or warnings occurred.
Deprecated and Removed Features
- An explicit deprecation diagnostic was added for policy
CMP0068
and policyCMP0069
(CMP0067
and below were already deprecated). The :manual:`cmake-policies(7)` manual explains that the OLD behaviors of all policies are deprecated and that projects should port to the NEW behaviors. - The :cpack_gen:`CPack PackageMaker Generator` generator has been
deprecated because Xcode no longer distributes the PackageMaker tools.
The undocumented
OSXX11
generator has also been deprecated. - The :manual:`cmake(1)` command-line
-E remove
and-E remove_directory
tools are deprecated in favor of the new-E rm
tool. The older tools always returned 0 if a named path did not exist even without the force option and cannot be fixed without breaking compatibility, and so have been superseded. - The :cpack_gen:`CPack NSIS Generator` now requires NSIS 3.0 or later.
Other Changes
- The :manual:`file API <cmake-file-api(7)>` index file now emits a
multiConfig
flag specifying whether or not the generator supports multiple output configurations. - Target link properties :prop_tgt:`INTERFACE_LINK_OPTIONS`, :prop_tgt:`INTERFACE_LINK_DIRECTORIES` and :prop_tgt:`INTERFACE_LINK_DEPENDS` are now transitive over private dependencies on static libraries. See policy :policy:`CMP0099`.
- When using MinGW tools, the :command:`find_library` command no longer
finds
.dll
files by default. Instead, it expects.dll.a
import libraries to be available. - The :generator:`MinGW Makefiles` generator no longer issues an error if
sh.exe
is present in the environment'sPATH
. - The :generator:`Ninja` generator now prefers the first ninja build
tool to appear in the
PATH
no matter whether it is calledninja-build
,ninja
, orsamu
. Previously the first of those names to appear anywhere in thePATH
would be preferred. - With SDCC the
sdar
tool is now preferred oversdcclib
as librarian. The latter was deprecated by SDCC 3.2.0 and removed in SDCC 3.8.6. - With SDCC the default flags no longer include any target-specific flags. Previously the default flags were hard-coded for 8051.
- The :variable:`CMAKE_VS_GLOBALS` variable value now applies during compiler identification and in targets created by the :command:`add_custom_target` command.
- The :generator:`Xcode` generator no longer hard-codes
-Wmost
,-Wno-four-char-constants
, and-Wno-unknown-pragmas
warning flags.
Updates
Changes made since CMake 3.17.0 include the following.
3.17.1
- CMake 3.17.0 updated the :cpack_gen:`CPack NSIS Generator` with changes that require NSIS 3.0 or later. CMake 3.17.1 now enforces the use of a sufficiently new version.
3.17.3
- Selection of the Objective C or C++ compiler now considers the :envvar:`CC` or :envvar:`CXX` environment variable if the :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
- The :module:`FindPkgConfig` module now extracts include directories
prefixed with
-isystem
into the*_INCLUDE_DIRS
variables and :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties. Previously they would be places in*_CFLAGS_OTHER
variables and :prop_tgt:`INTERFACE_COMPILE_OPTIONS` target properties.
3.17.5
- The default value of :variable:`CMAKE_AUTOMOC_PATH_PREFIX` was changed to
OFF
because this feature can break existing projects that have identically named header files in different include directories. This restores compatibility with behavior of CMake 3.15 and below. The default was also changed toOFF
in 3.16.9.