Changes made since CMake 3.11 include the following.
- The cmake(1) Build a Project (cmake --build) gained
--parallel [<jobs>] and -j [<jobs>] options to specify a parallel
build level. They map to corresponding options of the native build tool.
- The add_compile_definitions() command was added to set preprocessor
definitions at directory level. This supersedes add_definitions().
- The cmake_minimum_required() and cmake_policy(VERSION)
commands now accept a version range using the form <min>[...<max>].
The <min> version is required but policies are set based on the
older of the running CMake version and the version specified by
<max>. This allows projects to specify a range of versions
for which they have been updated and avoid explicit policy settings.
- The file(GLOB) and file(GLOB_RECURSE) commands
learned a new flag CONFIGURE_DEPENDS which enables expression of
build system dependency on globbed directory’s contents.
- The file(TOUCH) and file(TOUCH_NOCREATE) commands
were added to expose TOUCH functionality without having to use
CMake’s command-line tool mode with execute_process().
- The find_package() command now searches prefixes specified by
the <PackageName>_ROOT CMake variable and the
<PackageName>_ROOT environment variable. Package roots are
maintained as a stack so nested calls to all find_* commands inside
find modules also search the roots as prefixes.
See policy CMP0074.
- The install() command learned an optional NAMELINK_COMPONENT
parameter, which allows you to change the component for a shared library’s
namelink. If none is specified, the value of COMPONENT is used by
default.
- The list() command learned a JOIN sub-command
to concatenate list’s elements separated by a glue string.
- The list() command learned a SUBLIST sub-command
to get a sublist of the list.
- The list() command learned a TRANSFORM sub-command
to apply various string transformation to list’s elements.
- The project() command learned an optional HOMEPAGE_URL
parameter which has the effect of setting variables like
PROJECT_HOMEPAGE_URL, <PROJECT-NAME>_HOMEPAGE_URL
and CMAKE_PROJECT_HOMEPAGE_URL.
- The string() command learned a JOIN sub-command
to concatenate input strings separated by a glue string.
- target_compile_options() and add_compile_options()
commands gained a SHELL: prefix to specify a group of related
options using shell-like quoting.
- The target_link_libraries() command now supports
Object Libraries. Linking to an object library uses its object
files in direct dependents and also propagates usage requirements.
- The FindALSA module now provides imported targets.
- The FindCURL module now provides imported targets.
- The FindJPEG module now provides imported targets.
- The FindLibXml2 module now provides imported targets.
- The FindMatlab module now supports the Matlab Runtime
Compiler (MCR) for compiling and linking matlab extensions.
- A FindODBC module was added to find an Open Database Connectivity
(ODBC) library.
- The FindPkgConfig module has learned to export the found
libraries with full path for direct consumption with the
target_link_libraries() command.
- New FindPython3 and FindPython2 modules, as well as
a new FindPython module, have been added to provide a new way
to locate python environments.
- The UseSWIG module gained a whole refresh and is now more
consistent with standard CMake commands to generate libraries and is
fully configurable through properties.
- The UseSWIG module learned to manage multiple behaviors through
UseSWIG_MODULE_VERSION variable to ensure legacy support as well as more
robust handling of SWIG advanced features (like %template).
- The UseSWIG module learned to support CSHARP variant
wrapper files.
- The WriteCompilerDetectionHeader module gained a BARE_FEATURES
option to add a compatibility define for the exact keyword of a new language
feature.
- The ctest_start() command has been reworked so that you can simply
call ctest_start(APPEND) and it will read all the needed information from
the TAG file. The argument parsing has also been relaxed so that the order of
the arguments is less significant.
- A PROCESSOR_AFFINITY test property was added to request
that CTest run a test with CPU affinity for a set of processors
disjoint from other concurrently running tests with the property set.
- The Compile Features functionality
is now aware of C++ 20. No specific features are yet enumerated besides
the cxx_std_20 meta-feature.
- The Compile Features functionality
is now aware of the availability of C features in MSVC since VS 2010.
- The Compile Features functionality
is now aware of C language standards supported by Texas Instruments C
compilers.
- The Visual Studio 8 2005 generator has been removed.
- CMake no longer produces <tgt>_LIB_DEPENDS cache entries
for library targets. See policy CMP0073.
- Include flags for directories marked as SYSTEM are now moved after
non-system directories. The -isystem flag does this automatically,
so moving them explicitly to the end makes the behavior consistent on
compilers that do not have any -isystem flag.
- Fortran dependency scanning now supports dependencies implied by
Fortran Submodules.
- The existence and functionality of the file
${CMAKE_BINARY_DIR}/cmake_install.cmake has now been documented in the
install() documentation so that external packaging software can take
advantage of CPack-style component installs.
- The CheckIncludeFile module check_include_file macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy CMP0075.
- The CheckIncludeFileCXX module check_include_file_cxx macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy CMP0075.
- The CheckIncludeFiles module check_include_files macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
See policy CMP0075.
- The cmake(1) -E copy_directory tool now fails when the
source directory does not exist. Previously it succeeded by creating
an empty destination directory.
- The UseSWIG module swig_add_library() command
(and legacy swig_add_module command) now set the prefix of
Java modules to "" for MINGW, MSYS, and CYGWIN environments.