[ANNOUNCE] CMake 3.19.0-rc1 now ready for testing!

Robert Maynard robert.maynard at kitware.com
Tue Oct 13 21:19:00 BST 2020


I am proud to announce the first CMake 3.19 release candidate.
  https://cmake.org/download/

Documentation is available at:
  https://cmake.org/cmake/help/v3.19

Release notes appear below and are also published at
  https://cmake.org/cmake/help/v3.19/release/3.19.html

Some of the more significant changes in CMake 3.19 are:

* "cmake(1)" and "cmake-gui(1)" now recognize "CMakePresets.json" and
  "CMakeUserPresets.json" files.

* The "Xcode" generator now uses the Xcode “new build system” when
  generating for Xcode 12.0 or higher. See the
  "CMAKE_XCODE_BUILD_SYSTEM" variable. One may use "-T buildsystem=1"
  to switch to the legacy build system.

* The Visual Studio Generators for VS 2015 and above gained support
  for the Visual Studio Tools for Android.  One may now set
  "CMAKE_SYSTEM_NAME" to "Android" to generate ".vcxproj" files for
  the Android tools.

* CMake learned to support "ISPC" as a first-class language that can
  be enabled via the "project()" and "enable_language()" commands.
  "ISPC" is currently supported by the Makefile Generators and the
  "Ninja" generator on Linux, macOS, and Windows using the Intel ISPC
  compiler.

* "CUDA" language support for Clang now supports separable compilation
  ("CUDA_SEPARABLE_COMPILATION")

* The "CMake GUI" now has an environment variable editor.

* The "cmake_path()" command was added for operations on filesystem
  paths.

* The "file(GENERATE)" command gained a new "TARGET" keyword to
  support resolving target-dependent generator expressions.

* The "CMAKE_OPTIMIZE_DEPENDENCIES" variable was added to initialize
  the new "OPTIMIZE_DEPENDENCIES" target property and avoid
  unnecessarily building dependencies for a static library.

* The "CheckCompilerFlag" module has been added to generalize
  "CheckCCompilerFlag" and "CheckCXXCompilerFlag" to more languages.
  It also supports the "CUDA" and "ISPC" languages.

* The "CheckSourceCompiles" module has been added to generalize
  "CheckCSourceCompiles" and "CheckCXXSourceCompiles" to more
  languages. It also supports the "CUDA" and "ISPC" languages.

* The "CheckSourceRuns" module has been added to generalize
  "CheckCSourceRuns" and "CheckCXXSourceRuns" to more languages. It
  also supports the "CUDA" language.

* The "FindCUDAToolkit" module gained support for finding CUDA
  toolkits that do not contain "nvcc", as well as for finding
  scattered toolkit installations when cross-compiling.

* Interface Libraries may now have source files added via
  "add_library()" or "target_sources()".  Those with sources will be
  generated as part of the build system.

* Compatibility with versions of CMake older than 2.8.12 is now
  deprecated and will be removed from a future version.  Calls to
  "cmake_minimum_required()" or "cmake_policy()" that set the policy
  version to an older value now issue a deprecation diagnostic.


CMake 3.19 Release Notes
************************

Changes made since CMake 3.18 include the following.


New Features
============


Presets
-------

* "cmake(1)" and "cmake-gui(1)" now recognize "CMakePresets.json" and
  "CMakeUserPresets.json" files.


Generators
----------

* The "Xcode" generator now uses the Xcode “new build system” when
  generating for Xcode 12.0 or higher. See the
  "CMAKE_XCODE_BUILD_SYSTEM" variable. One may use "-T buildsystem=1"
  to switch to the legacy build system.

* The "Xcode" generator gained support for linking libraries and
  frameworks via the *Link Binaries With Libraries* build phase
  instead of always by embedding linker flags directly.  This behavior
  is controlled by a new "XCODE_LINK_BUILD_PHASE_MODE" target
  property, which is initialized by a new
  "CMAKE_XCODE_LINK_BUILD_PHASE_MODE" variable.

* The Visual Studio Generators for VS 2015 and above gained support
  for the Visual Studio Tools for Android.  One may now set
  "CMAKE_SYSTEM_NAME" to "Android" to generate ".vcxproj" files for
  the Android tools.


Languages
---------

* CMake learned to support "ISPC" as a first-class language that can
  be enabled via the "project()" and "enable_language()" commands.
  "ISPC" is currently supported by the Makefile Generators and the
  "Ninja" generator on Linux, macOS, and Windows using the Intel ISPC
  compiler.

* "CUDA" language support for Clang now includes:

  * separable compilation ("CUDA_SEPARABLE_COMPILATION"), and

  * finding scattered toolkit installations when cross-compiling.


File-Based API
--------------

* The "cmake-file-api(7)" “codemodel” version 2 "version" field has
  been updated to 2.2.

* The "cmake-file-api(7)" “codemodel” version 2 “target” object gained
  a new "languageStandard" field in the "compileGroups" objects.


Command-Line
------------

* The "cmake(1)" command-line tool’s "--install" mode gained a "--
  default-directory-permissions" option.

* "cmake(1)" gained a "-E create_hardlink" command-line tool that can
  be used to create hardlinks between files.


GUI
---

* The "CMake GUI" now has an environment variable editor.


Commands
--------

* The "add_test()" command now (officially) supports whitespace and
  other special characters in the name for the test it creates. See
  policy "CMP0110".

* The "cmake_language()" command gained a "DEFER" mode to schedule
  command calls to occur at the end of processing a directory.

* The "cmake_path()" command was added for operations on filesystem
  paths.

* The "configure_file()" command gained a "NO_SOURCE_PERMISSIONS"
  option to suppress copying the input file’s permissions to the
  output file.

* The "execute_process()" command gained a "COMMAND_ERROR_IS_FATAL"
  option to specify a fatal error.

* The "file(ARCHIVE_CREATE)" command gained a "COMPRESSION_LEVEL"
  option to specify the compression level.

* The "file(CHMOD)" and "file(CHMOD_RECURSE)" subcommands were added
  to set permissions of files and directories.

* The "file(DOWNLOAD)" command "<file>" argument is now optional.  If
  it is not specified, the file is not saved.

* The "file(GENERATE)" command gained a new "TARGET" keyword to
  support resolving target-dependent generator expressions.

* The "file()" gained sub-command *REAL_PATH* to compute a path with
  symlinks resolved.

* The "find_package()" command learned to handle a version range.

* The "separate_arguments()" command gained new "PROGRAM" option to
  search program.

* The "set_property()", "get_property()", and
  "get_directory_property()" commands’ "DIRECTORY" options now accept
  references to binary directory paths, such as the value of
  "CMAKE_CURRENT_BINARY_DIR".

* The "string()" command gained set of new "JSON" sub commands to
  provide JSON parsing capabilities.


Variables
---------

* The "CMAKE_CLANG_VFS_OVERLAY" variable was added to tell Clang to
  use a VFS overlay to support the Windows SDK when cross-compiling
  from hosts with case-sensitive filesystems.

* The "CMAKE_MFC_FLAG" variable now supports generator expressions.

* The "CMAKE_OPTIMIZE_DEPENDENCIES" variable was added to initialize
  the new "OPTIMIZE_DEPENDENCIES" target property and avoid
  unnecessarily building dependencies for a static library.

* The "CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM" variable was
  added to tell the Visual Studio Generators what maximum version of
  the Windows SDK to choose.


Properties
----------

* The "EXCLUDE_FROM_ALL" target property now supports "generator
  expressions".

* The "OPTIMIZE_DEPENDENCIES" target property was added to avoid
  unnecessarily building dependencies for a static library.

* The "PCH_INSTANTIATE_TEMPLATES" target property was added to enable
  template instantiation in the precompiled header. This is enabled by
  default and offers a roughly 20% compile time improvement. Currently
  only supported by Clang 11.

* The "WIN32_EXECUTABLE" target property now supports "generator
  expressions".


Modules
-------

* The "CheckCompilerFlag" module has been added to generalize
  "CheckCCompilerFlag" and "CheckCXXCompilerFlag" to more languages.
  It also supports the "CUDA" and "ISPC" languages.

* The "CheckLinkerFlag" module now supports the "CUDA" language.

* The "CheckSourceCompiles" module has been added to generalize
  "CheckCSourceCompiles" and "CheckCXXSourceCompiles" to more
  languages. It also supports the "CUDA" and "ISPC" languages.

* The "CheckSourceRuns" module has been added to generalize
  "CheckCSourceRuns" and "CheckCXXSourceRuns" to more languages. It
  also supports the "CUDA" language.

* "CMakePackageConfigHelpers" module learned to manage version range.

* The "FindCUDAToolkit" module gained support for finding CUDA
  toolkits that do not contain "nvcc", as well as for finding
  scattered toolkit installations when cross-compiling.

* The "FindPackageHandleStandardArgs" module learned to handle version
  range. It also gained the "find_package_check_version()" command to
  check the validity of a version against version-related arguments of
  "find_package()" command.

* The "FindPython3", "FindPython2" and "FindPython" modules gained the
  capability to manage a version range.

* The "FindPython3", "FindPython2" and "FindPython" modules provide,
  respectively, the variable "Python3_LINK_OPTIONS",
  "Python2_LINK_OPTIONS" and "Python_LINK_OPTIONS" for link options.

* The "FindSDL" module now provides:

  * imported target "SDL::SDL",

  * result variables "SDL_LIBRARIES" and "SDL_INCLUDE_DIRS",

  * version variables "SDL_VERSION", "SDL_VERSION_MAJOR"
    "SDL_VERSION_MINOR", and "SDL_VERSION_PATCH".

* "FindSWIG" module gains the capability to manage a version range.

* The "FindTIFF" module gained a "CXX" component to find the "tiffxx"
  library containing C++ bindings.

* The "FindVulkan" module now provides a "Vulkan::glslc" imported
  target and associated "Vulkan_GLSLC_EXECUTABLE" variable which
  contain the path to the GLSL SPIR-V compiler.

* "UseSWIG" module gains new source file properties "OUTPUT_DIR" and
  "OUTFILE_DIR" to manage output directories on per source basis.


CTest
-----

* "ctest(1)" now supports "compute-sanitizer" ("cuda-memcheck") as
  "CTEST_MEMORYCHECK_COMMAND".  The different tools (memcheck,
  racecheck, synccheck, initcheck) supplied by "compute-sanitizer" can
  be selected by adding appropriate flags to the
  "CTEST_MEMORYCHECK_COMMAND_OPTIONS" variable.  The default flags are
  "--tool memcheck --leak-check full".


CPack
-----

* CPack gained the "CPACK_PRE_BUILD_SCRIPTS",
  "CPACK_POST_BUILD_SCRIPTS", and "CPACK_PACKAGE_FILES" variables.

* The "CPack External Generator" gained the
  "CPACK_EXTERNAL_BUILT_PACKAGES" variable.

* The "CPack WIX Generator" gained a "CPACK_WIX_CUSTOM_XMLNS" option
  to specify custom XML namespaces.


Other
-----

* Interface Libraries may now have source files added via
  "add_library()" or "target_sources()".  Those with sources will be
  generated as part of the build system.


Deprecated and Removed Features
===============================

* Compatibility with versions of CMake older than 2.8.12 is now
  deprecated and will be removed from a future version.  Calls to
  "cmake_minimum_required()" or "cmake_policy()" that set the policy
  version to an older value now issue a deprecation diagnostic.

* An explicit deprecation diagnostic was added for policy "CMP0071"
  ("CMP0071" 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.

* macOS SDKs older than 10.5 are no longer supported.

* "cmake-gui(1)" now requires Qt5. Support for compiling with Qt4 has
  been removed.

* The "cmake(1)" command-line option "--warn-unused-vars" has been
  removed and is now silently ignored.  The option has not worked
  correctly since CMake 3.3.


Documentation
=============

The following guides have been added:

* "IDE Integration Guide"

* "Importing and Exporting Guide"


Other Changes
=============

* Building for macOS will now use the latest SDK available on the
  system, unless the user has explicitly chosen a SDK using
  "CMAKE_OSX_SYSROOT".  The deployment target or system macOS version
  will not affect the choice of SDK.

* The "CMAKE_<LANG>_COMPILER" variable may now be used to store
  “mandatory” compiler flags like the "CC" and other environment
  variables.

* The "CMAKE_<LANG>_FLAGS_INIT" variable will now be considered during
  the compiler identification check if other sources like
  "CMAKE_<LANG>_FLAGS" or "CFLAGS" are not set.

* The "find_program()" command now requires permission to execute but
  not to read the file found.  See policy "CMP0109".

* An imported target with a missing location now fails during
  generation if the location is used.  See policy "CMP0111".

* The following target-based generator expressions that query for
  directory or file name components no longer add a dependency on the
  evaluated target. See policy "CMP0112".

  * "TARGET_FILE_DIR"

  * "TARGET_LINKER_FILE_BASE_NAME"

  * "TARGET_LINKER_FILE_NAME"

  * "TARGET_LINKER_FILE_DIR"

  * "TARGET_SONAME_FILE_NAME"

  * "TARGET_SONAME_FILE_DIR"

  * "TARGET_PDB_FILE_NAME"

  * "TARGET_PDB_FILE_DIR"

  * "TARGET_BUNDLE_DIR"

  * "TARGET_BUNDLE_CONTENT_DIR"

* Makefile Generators no longer repeat custom commands from target
  dependencies.  See policy "CMP0113".

* The "ExternalProject" module handling of step target dependencies
  has been revised.  See policy "CMP0114".

* The "OSX_ARCHITECTURES" target property is now respected for the
  "ASM" language.

* If "CUDA" compiler detection fails with user-specified
  "CMAKE_CUDA_ARCHITECTURES" or "CMAKE_CUDA_HOST_COMPILER", an error
  is raised.


More information about the kde-devel mailing list