CMake 3.13 Release Notes

Changes made since CMake 3.12 include the following.

New Features

Generators

Command-Line

  • The cmake(1) command gained the -S <source_dir> command line option to specify the location of the source directory. This option can be used independently of -B.
  • The cmake(1) command gained the -B <build_dir> command line option to specify the location of the build directory. This option can be used independently of -S.
  • The cmake(1) -E create_symlink command can now be used on Windows.

Commands

Variables

Properties

Modules

  • The FindBoost module gained a Boost_ARCHITECTURE option to specify a Boost architecture-specific library filename fragment.
  • The FindCURL module learned to find debug and release variants separately.
  • The FindMatlab module gained new components ENGINE_LIBRARY and DATAARRAY_LIBRARY to request finding the Matlab C++ Engine and DataArray libraries respectively.
  • The FindMatlab module now explicitly exports mexFunction in Visual Studio.
  • The FindMatlab module gained a new MCC_COMPILER component to request finding the Matlab Compiler add-on.
  • The FindPkgConfig module gained an option to create imported targets in global scope.
  • The FindPkgConfig module gained support for < and > operators for version checks in addition to the already supported operators >=, <=, and =.
  • Modules FindPython3, FindPython2 and FindPython gain capability to control order of resource lookup on macOS (Framework) and Windows (Registry).
  • The FindSubversion module Subversion_WC_INFO command gained an IGNORE_SVN_FAILURE option to suppress failures, e.g. when the source tree is not under Subversion control.
  • The UseSWIG module learned to manage target property INCLUDE_DIRECTORIES for SWIG compilation.

CTest

  • ctest(1) gained a --progress option to enable a live test progress summary when output goes to a terminal.

CPack

  • The CPack DEB Generator learned to split debug symbols into a corresponding .ddeb package when CPACK_DEBIAN_DEBUGINFO_PACKAGE is set.
  • The CPack DEB Generator learned to honor the SOURCE_DATE_EPOCH environment variable when packaging files. This is useful for generating reproducible packages.
  • CPack gained a new CPack External Generator which is used to export the CPack metadata in a format that other software can understand. The intention of this generator is to allow external packaging software to take advantage of CPack’s features when it may not be possible to use CPack for the entire packaging process.

Deprecated and Removed Features

  • An explicit deprecation diagnostic was added for policies CMP0055 through CMP0063 (CMP0054 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.

Other Changes

  • The precompiled binaries provided on cmake.org now include qthelp-format documentation.
  • The option() command now honors an existing normal variable of the same name and does nothing instead of possibly creating a cache entry (or setting its type) and removing the normal variable. See policy CMP0077.
  • The Makefile Generators learned to remove custom command and custom target byproducts during make clean.
  • The target_sources() command now interprets relative source file paths as relative to the current source directory. This simplifies incrementally building up a target’s sources from subdirectories. The CMP0076 policy was added to provide backward compatibility with the old behavior where required.
  • The BundleUtilities module may no longer be included at configure time. This was always a bug anyway. See policy CMP0080.
  • The UseSWIG module has changed strategy for target naming. See policy CMP0078.
  • The LINK_DIRECTORIES target property now expects absolute paths. See policy CMP0081.
  • The CPack generators have been moved into their own separate section in the documentation, rather than having the documentation in their internal implementation modules. These internal implementation modules are also no longer available to scripts that may have been incorrectly including them, because they should never have been available in the first place.