Changes made since CMake 3.10 include the following.
- 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.
Changes made since CMake 3.11.0 include the following.
- The CheckIncludeFile module check_include_file macro,
CheckIncludeFileCXX module check_include_file_cxx macro,
and CheckIncludeFiles module check_include_files macro
were taught to honor the CMAKE_REQUIRED_LIBRARIES variable in
CMake 3.11.0. This has been reverted due to changing behavior of
checks for existing projects. It may be restored in the future
with a policy for compatibility.
- Calling add_library() to create an alias of an imported
target that is not globally visible now causes an error again as
it did prior to 3.11.0. This diagnostic was accidentally dropped
from CMake 3.11.0 and 3.11.1 by the change to allow globally visible
imported targets to be aliased.
- The FindQt4 module qt4_wrap_cpp, qt4_wrap_ui and
qt4_add_resources macros now set SKIP_AUTOMOC and
SKIP_AUTOUIC on their generated files. These files never
need to be processed by moc or uic, and we must say so explicitly to
account for policy CMP0071.
- CMake 3.11.0 introduced support for resolving symbolic links on
Windows in code paths that typically do so on UNIX. This has been
reverted due to breakage on subst drives.