Changes made since CMake 3.10 include the following.
- The CheckIncludeFile module check_include_file macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
- The CheckIncludeFileCXX module check_include_file_cxx macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
- The CheckIncludeFiles module check_include_files macro
learned to honor the CMAKE_REQUIRED_LIBRARIES variable.
- The CheckIncludeFiles module CHECK_INCLUDE_FILES()
command gained a LANGUAGE option to specify whether to check using the
C or CXX compiler.
- The CMakePackageConfigHelpers module
write_basic_package_version_file() command learned a new
SameMinorVersion mode for the COMPATIBILITY argument.
- The ExternalProject module learned to substitute <DOWNLOAD_DIR>
in comments, commands, working directory and byproducts.
- The ExternalProject module gained NETRC and NETRC_FILE
options to specify use of a .netrc file.
- A new FetchContent module was added which supports populating
content at configure time using any of the download/update methods
supported by ExternalProject_Add(). This allows the content
to be used immediately during the configure stage, such as with
add_subdirectory(), etc. Hierarchical project structures are
well supported, allowing parent projects to override the content details
of child projects and ensuring content is not populated multiple times
throughout the whole project tree.
- The FindBLAS and FindLAPACK modules learned to support
FLAME blis and libflame.
- The FindDoxygen module doxygen_add_docs() function
now supports a new DOXYGEN_VERBATIM_VARS list variable. Any
DOXYGEN_... variable contained in that list will bypass the automatic
quoting logic, leaving its contents untouched when transferring them to the
output Doxyfile.
- A FindIconv module was added to locate iconv support.
- The GenerateExportHeader module GENERATE_EXPORT_HEADER command
gained an INCLUDE_GUARD_NAME option to change the name of the include
guard symbol written to the generated export header.
Additionally, it now adds a comment after the closing #endif on the
generated export header’s include guard.
- The UseJava module add_jar command gained a
GENERATE_NATIVE_HEADERS option to generate native header files
using javac -h for javac 1.8 or above. This supersedes
create_javah, which no longer works with JDK 1.10 and above due
to removal of the javah tool by JEP 313.
- When using AUTOMOC or AUTOUIC, CMake now starts
multiple parallel moc or uic processes to reduce the build time.
A new CMAKE_AUTOGEN_PARALLEL variable and
AUTOGEN_PARALLEL target property may be set to specify the
number of parallel moc or uic processes to start. The default
is derived from the number of CPUs on the host.
- Alias Targets may now alias Imported Targets that are
created with the GLOBAL option to add_library().
- Interface Libraries may now have custom properties set on them if
they start with either an underscore (_) or a lowercase ASCII character.
The original intention was to only allow properties which made sense for
INTERFACE libraries, but it also blocked usage of custom properties.
- The cmake(1) --open <dir> command-line option was added
to open generated IDE projects like Visual Studio solutions or Xcode
projects.
- An explicit deprecation diagnostic was added for policies CMP0037
through CMP0054 (CMP0036 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 KDevelop3 generator has been removed.
- Policy CMP0037 no longer reserves target names associated
with optional features, such as test and package, unless
the corresponding feature is enabled.
- The FindOpenGL module now prefers GLVND libraries if available.
See policy CMP0072.
- The minimum deployment target set in the
CMAKE_OSX_DEPLOYMENT_TARGET variable used to be only
applied for macOS regardless of the selected SDK. It is now properly
set for the target platform selected by CMAKE_OSX_SYSROOT.
For example, if the sysroot variable specifies an iOS SDK then the
value in CMAKE_OSX_DEPLOYMENT_TARGET is interpreted as minimum
iOS version.
- The Xcode generator behavior of generating one project
file per project() command may now be controlled with the
CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY variable.
This could be useful to speed up the CMake generation step for
large projects and to work-around a bug in the ZERO_CHECK logic.
- Since the CMakeCache.txt format does not support newlines in values,
values containing newlines are now truncated before writing to the file.
In addition, a warning comment is written to the cache file, and a warning
message is displayed to the user on the console.