[CMake] [ANNOUNCE] CMake 3.17.0-rc2 is ready for testing
Robert Maynard
robert.maynard at kitware.com
Mon Mar 2 16:34:19 EST 2020
I am proud to announce the second CMake 3.17 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v3.17
Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.17/release/3.17.html
Some of the more significant changes in CMake 3.17 are:
* "cmake(1)" gained a "Ninja Multi-Config" generator, which is similar
to the "Ninja" generator but can be used to build multiple
configurations at once.
* Visual Studio Generators learned to support per-config sources.
Previously only Command-Line Build Tool Generators supported them.
* The "Compile Features" functionality now offers meta-features for
the CUDA language standard levels (e.g. "cuda_std_03",
"cuda_std_14"). See "CMAKE_CUDA_KNOWN_FEATURES".
* The "CMAKE_CUDA_RUNTIME_LIBRARY" variable and "CUDA_RUNTIME_LIBRARY"
target property were introduced to select the CUDA runtime library
used when linking targets that use CUDA.
* The "FindCUDAToolkit" module was added to find the CUDA Toolkit
without enabling CUDA as a language.
* "cmake(1)" gained a "--debug-find" command-line option to enable
additional human-readable output on where find commands search.
* The "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 "FindCURL" module learned to find CURL using the
"CURLConfig.cmake" package configuration file generated by CURL’s
cmake buildsystem. It also gained a new "CURL_NO_CURL_CMAKE" option
to disable this behavior.
* The "FindPython" module has learned to find Python components in
active virtual environments managed by "conda".
* The "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 "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 for "until-pass" and
"after-timeout".
* Target link properties "INTERFACE_LINK_OPTIONS",
"INTERFACE_LINK_DIRECTORIES" and "INTERFACE_LINK_DEPENDS" are now
transitive over private dependencies on static libraries. See policy
"CMP0099".
* When using MinGW tools, the "find_library()" command no longer finds
".dll" files by default. Instead it expects ".dll.a" import
libraries to be available.
* The "Ninja" generator now prefers the first ninja build tool to
appear in the "PATH" no matter whether it is called "ninja-build",
"ninja", or "samu". Previously the first of those names to appear
anywhere in the "PATH" would be preferred.
* "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.
CMake 3.17 Release Notes
************************
Changes made since CMake 3.16 include the following.
New Features
============
Generators
----------
* "cmake(1)" gained a "Ninja Multi-Config" generator, which is similar
to the "Ninja" generator but can be used to build multiple
configurations at once.
* Visual Studio Generators learned to support per-config sources.
Previously only Command-Line Build Tool Generators supported them.
* Visual Studio Generators for VS 2010 and above now support
specifying the "VCTargetsPath" value for project files in
"CMAKE_GENERATOR_TOOLSET" setting.
* Visual Studio Generators for VS 2010 and above learned to support
.NET Standard and .NET Core. See the "DOTNET_TARGET_FRAMEWORK"
target property and associated "CMAKE_DOTNET_TARGET_FRAMEWORK"
variable.
Languages
---------
* The "Compile Features" functionality now offers meta-features for
the CUDA language standard levels (e.g. "cuda_std_03",
"cuda_std_14"). See "CMAKE_CUDA_KNOWN_FEATURES".
Compilers
---------
* The IBM XL Fortran compiler is now supported by the "Ninja"
generator.
Command-Line
------------
* "cmake(1)" gained a "--debug-find" command-line option to enable
additional human-readable output on where find commands search.
* "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.
* "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 "add_custom_command()" command learned to interpret paths in
"DEPENDS" arguments that are specified relative to the current
binary directory.
* The "foreach()" learned a new option "ZIP_LISTS" to iterate over
multiple lists simultaneously.
* The "load_cache(READ_WITH_PREFIX)" command mode is now allowed when
using "cmake -P" to Run a Script.
* The "message()" command learned to output context provided in the
"CMAKE_MESSAGE_CONTEXT" variable for log levels "NOTICE" and below.
Enable this output with the new "--log-context" command-line option
or "CMAKE_MESSAGE_CONTEXT_SHOW" variable.
* The "message()" command gained new keywords "CHECK_START",
"CHECK_PASS" and "CHECK_FAIL".
* "target_compile_options()" command now honors the "BEFORE" keyword
more consistently. See policy "CMP0101".
* The "FindCUDAToolkit" module was added to find the CUDA Toolkit
without enabling CUDA as a language.
Variables
---------
* A "CMAKE_CTEST_ARGUMENTS" variable was added to specify a list of
command-line arguments passed to CTest when running through the
"test" (or "RUN_TESTS") target of the generated build system.
* The following variables are now defined inside a "function()":
* "CMAKE_CURRENT_FUNCTION"
* "CMAKE_CURRENT_FUNCTION_LIST_DIR"
* "CMAKE_CURRENT_FUNCTION_LIST_FILE"
* "CMAKE_CURRENT_FUNCTION_LIST_LINE"
* The "CMAKE_CUDA_RUNTIME_LIBRARY" variable and "CUDA_RUNTIME_LIBRARY"
target property were introduced to select the CUDA runtime library
used when linking targets that use CUDA.
* The "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 "CMAKE_EXPORT_COMPILE_COMMANDS" variable now takes its initial
value from the "CMAKE_EXPORT_COMPILE_COMMANDS" environment variable
if no explicit configuration is given.
* The "CMAKE_<LANG>_COMPILER_LAUNCHER" variable, if not set
explicitly, now takes its initial value from the
"CMAKE_<LANG>_COMPILER_LAUNCHER" environment variable.
* The "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 "CMAKE_XCODE_SCHEME_ENVIRONMENT" variable and
"XCODE_SCHEME_ENVIRONMENT" target property were added to tell the
"Xcode" generator to set the value of the "Custom Working Directory"
schema option.
Properties
----------
* The "AIX_EXPORT_ALL_SYMBOLS" target property and associated
"CMAKE_AIX_EXPORT_ALL_SYMBOLS" variable were created to optionally
explicitly disbale automatic export of symbols from shared libraries
on AIX.
* The "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 "INSTALL_NAME_DIR" target property now supports "generator
expressions". In particular, the "$<INSTALL_PREFIX>" generator
expression can be used to set the directory relative to the install-
time prefix.
* Target properties "OSX_COMPATIBILITY_VERSION" and
"OSX_CURRENT_VERSION" were added to set the "compatibility_version"
and "curent_version" respectively on macOS. For backwards
compatibility, if these properties are not set, "SOVERSION" and
"VERSION" are used respectively as fallbacks.
* The "VS_DOTNET_DOCUMENTATION_FILE" target property was added to tell
Visual Studio Generators to generate a "DocumentationFile" reference
in ".csproj" files.
Modules
-------
* The "ExternalProject" module "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 "FindCUDAToolkit" module was added to find the CUDA Toolkit
without enabling CUDA as a language.
* The "FindCURL" module learned to find CURL using the
"CURLConfig.cmake" package configuration file generated by CURL’s
cmake buildsystem. It also gained a new "CURL_NO_CURL_CMAKE" option
to disable this behavior.
* The "FindFLEX" module’s "FLEX_TARGET" command now runs "flex" with
"CMAKE_CURRENT_BINARY_DIR" as the working directory. See policy
"CMP0098".
* The "FindLibArchive" module now provides an imported target for
libarchive.
* The "FindPython" module has learned to find Python components in
active virtual environments managed by "conda".
* The "FindPython3" and "FindPython" modules gained, respectively,
variable "Python3_SOABI" and "Python_SOABI" giving the standard
extension suffix for modules.
* The "FindLibXml2" module now provides an imported target for the
"xmllint" executable
Autogen
-------
* "AUTOMOC" and "AUTOUIC" learned to process headers with a ".hh"
extension. See policy "CMP0100".
CTest
-----
* The "CTEST_CONFIGURATION_TYPE" variable is now set from the command
line when "ctest(1)" is invoked with "-C <cfg>".
* The "ctest(1)" gained support for Dr. Memory to run memcheck runs.
* The "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 "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 for "until-pass" and
"after-timeout".
* The "ctest_test()" command gained a "REPEAT <mode>:<n>" option to
specify conditions in which to repeat tests.
CPack
-----
* The "CPack DragNDrop Generator" learned to use the
"CPACK_DMG_<component>_FILE_NAME" variable to set a custom filename
when packaging components into their own DMGs.
* The "CPack DragNDrop Generator" learned to handle RTF formatted
license files. When "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 NSIS Generator" gained a new variable
"CPACK_NSIS_MUI_HEADERIMAGE" to set the header image. To not break
existing setups, it still defaults to "CPACK_PACKAGE_ICON" if the
new variable is not set.
* The "CPack NSIS Generator" now supports "CPACK_NSIS_UNINSTALL_NAME".
This can be used to specify the name of the Uninstall program.
* The "CPack NSIS Generator" now supports "CPACK_NSIS_WELCOME_TITLE"
and "CPACK_NSIS_WELCOME_TITLE_3LINES". These can be used to specify
the welcome page title and display it in 3 lines.
* The "CPack NSIS Generator" now supports "CPACK_NSIS_FINISH_TITLE"
and "CPACK_NSIS_FINISH_TITLE_3LINES". These can be used to specify
the finish page title and display it in 3 lines.
* The "CPack productbuild Generator" gained option
"CPACK_PRODUCTBUILD_BACKGROUND" to specify a background image for
the macOS installer.
Other
-----
* "ccmake(1)" now displays cache values using colors based on the
entry type if the terminal supports color.
* "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 policy "CMP0069" ("CMP0067" and below were already deprecated).
The "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 PackageMaker Generator" generator has been deprecated
because Xcode no longer distributes the PackageMaker tools. The
undocumented "OSXX11" generator has also been deprecated.
* The "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.
Other Changes
=============
* The "file API" index file now emits a "multiConfig" flag specifying
whether or not the generator supports multiple output
configurations.
* Target link properties "INTERFACE_LINK_OPTIONS",
"INTERFACE_LINK_DIRECTORIES" and "INTERFACE_LINK_DEPENDS" are now
transitive over private dependencies on static libraries. See policy
"CMP0099".
* When using MinGW tools, the "find_library()" command no longer finds
".dll" files by default. Instead it expects ".dll.a" import
libraries to be available.
* The "MinGW Makefiles" generator no longer issues an error if
"sh.exe" is present in the environment’s "PATH".
* The "Ninja" generator now prefers the first ninja build tool to
appear in the "PATH" no matter whether it is called "ninja-build",
"ninja", or "samu". Previously the first of those names to appear
anywhere in the "PATH" would be preferred.
* With SDCC the "sdar" tool is now preferred over "sdcclib" 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 "CMAKE_VS_GLOBALS" variable value now applies during compiler
identification and in targets created by the "add_custom_target()"
command.
* The "Xcode" generator no longer hard-codes "-Wmost", "-Wno-four-
char-constants", and "-Wno-unknown-pragmas" warning flags.
----------------------------------------------------------------------------
Changes made since CMake 3.17.0-rc1:
Brad King (4):
Help: Replace UTF-8 apostrophe with ascii apostrophe
KWSys: SystemTools: CopyFileIfDifferent: Fix endless recursion
KWSys: Terminal: Add st-256color to VT100 color support whitelist
CMake 3.17.0-rc2
Craig Scott (3):
Tests: Fix test_clean target missing some test directories
Tests: Add missing ExternalProject smoke tests
ExternalProject: Quote each git --config option to handle spaces
Cristian Adam (1):
PCH: Copy the timestamp from an absolute header file
Francisco Facioni (1):
Ninja: Do not use nvcc response files with non-nvcc tools
Kyle Edwards (14):
Ninja Multi-Config: Fix issue with framework dependencies and Autogen
Refactor: Require detail when calling cmCTestRunTest::StartFailure()
CTest: Improve error reporting with bad working directory for tests
Refactor: Provide more detailed error information from TryAllocateResources()
CTest: Provide more detailed information on resource allocation error
Tests: Fix CustComDepend test for Ninja Multi-Config
Tests: Fix CFBundleTest for Ninja Multi-Config
Help: Note that CMAKE_CFG_INTDIR is not fully supported on Ninja Multi-Config
Help: Clarify that the CTest resource allocation feature doesn't oversubscribe
Ninja Multi-Config: Remove "NMC" from variable names
Generator: Don't allow Ninja Multi-Config variables on other generators
Ninja Multi-Config: Always generate build.ninja
foreach: Fix crash when parsing invalid integer
foreach: Set fatal error on invalid range
Marc Chevrier (2):
FindPython: Mark non-public cache entries INTERNAL
FindPython: Do not cache computed result variables
Richard (1):
Autogen: Recognize the new Q_NAMESPACE_EXPORT macro in AUTOMOC
Robert Maynard (1):
FindCUDA: Only depend on Threads::Threads on platforms that need it
Rolf Eike Beer (2):
FindPkgConfig: set policies CMP0054 and CMP0057 to new
Tests: fix RunCMake.Make test when run on systems with non-english locale
Saleem Abdulrasool (1):
Swift: support `-rpath` for executables
Sergey Larin (1):
PCH: Clang: Update PCH usage flags to include original header
More information about the CMake
mailing list