Changes made since CMake 3.6 include the following.
- The Ninja generator learned to conditionally support
Fortran when using a ninja tool that has the necessary features.
See generator documentation for details.
- The Ninja generator learned to produce phony targets
of the form sub/dir/{test,install,package} to drive the build
of a subdirectory installation, test or packaging target.
This is equivalent to cd sub/dir; make {test,install,package}
with Makefile Generators.
- The Visual Studio 15 2017 generator was added. This is
experimental and based on “Visual Studio 2017 RC” because this version
of VS has not been released.
- Visual Studio Generators for VS 2010 and above learned to
place .natvis source files into VS project files properly.
- The Xcode generator’s rudimentary Swift language support
learned to honor a new CMAKE_Swift_LANGUAGE_VERSION variable
to tell Xcode what version of Swift is used by the source.
- The CodeLite generator gained a new
CMAKE_CODELITE_USE_TARGETS option
to change project creation from projects to targets.
- The add_custom_command() command gained a new DEPFILE
option that works with the Ninja generator to provide
implicit dependency information to the build tool.
- The cmake_parse_arguments() command gained a new PARSE_ARGV
mode to read arguments directly from ARGC and ARGV#
variables inside a function() body.
- The export() command gained an ANDROID_MK option
to generate Android.mk files referencing CMake-built
libraries as prebuilts for the Android NDK build system.
- The file(DOWNLOAD) and file(UPLOAD) commands gained
HTTPHEADER <HTTP-header> and USERPWD <username>:<password> options.
- The find_library() and find_package() commands learned
to search in lib32/ directories when the build targets a 32-bit
architecture. See the FIND_LIBRARY_USE_LIB32_PATHS global
property.
- The find_package() command gained the possibility of
sorting compatible libraries by NAME or by NATURAL sorting by
setting the two new variables CMAKE_FIND_PACKAGE_SORT_ORDER
and CMAKE_FIND_PACKAGE_SORT_DIRECTION.
- The if() command gained new boolean comparison operations
LESS_EQUAL, GREATER_EQUAL, STRLESS_EQUAL, STRGREATER_EQUAL,
VERSION_LESS_EQUAL, and VERSION_GREATER_EQUAL.
- The install() command gained an EXPORT_ANDROID_MK
subcommand to install Android.mk files referencing installed
libraries as prebuilts for the Android NDK build system.
- The string(TIMESTAMP) and file(TIMESTAMP)
commands gained support for the %a and %b placeholders.
These are the abbreviated weekday and month names.
- The try_compile() command source file signature now honors
configuration-specific flags (e.g. CMAKE_<LANG>_FLAGS_DEBUG)
in the generated test project. Previously only the default such flags
for the current toolchain were used. See policy CMP0066.
- On Apple platforms the BUNDLE_EXTENSION target property
now also applies to Frameworks and App Bundles.
- A BINARY_DIR directory property was added to get the
absolute path to the binary directory corresponding to the source
directory on which the property is read.
- A BUILDSYSTEM_TARGETS directory property was added to
get the list of logical buildsystem target names added by the
project in a directory.
- A LINK_WHAT_YOU_USE target property and supporting
CMAKE_LINK_WHAT_YOU_USE variable were introduced
to detect (on UNIX) shared libraries that are linked but not
needed by running ldd -r -u.
- A SOURCE_DIR directory property was added to get the
absolute path to the source directory associated with a directory.
- A SUBDIRECTORIES directory property was added to
get the list of subdirectories added by a project in a directory.
- A VS_SDK_REFERENCES target property was added to tell
Visual Studio Generators to reference the named SDKs.
- A VS_TOOL_OVERRIDE source file property was created to tell
Visual Studio Generators what tool to use for a source file.
- The WINDOWS_EXPORT_ALL_SYMBOLS target property now applies
to executable targets with the ENABLE_EXPORTS property set.
- A XCODE_FILE_ATTRIBUTES source file property was
added to tell the Xcode generator to generate
custom content in the Xcode project attributes for the file.
- An AndroidTestUtilities module was added to manage transfer
of test data to an Android device.
- The CheckFortranSourceCompiles module macro
CHECK_Fortran_SOURCE_COMPILES gained a SRC_EXT option
to specify a custom test Fortran source file extension.
- The ExternalProject module gained HTTP_USERNAME and
HTTP_PASSWORD options to set http download credentials.
- The ExternalProject module gained a HTTP_HEADER
option to add http download headers.
- The FindBISON module BISON_TARGET macro learned a new
REPORT_FILE option to specify the bison --report-file= option.
- The FindBZip2 module now provides imported targets.
- A FindICU module was introduced to find the International
Components for Unicode (ICU) libraries and programs.
- The FindMatlab module learned to find the SIMULINK and MAT
components.
- The FindMatlab module matlab_add_mex() command learned
to add executables and modules.
- The FindMatlab module matlab_add_unit_test() command
learned to support inline Matlab test code.
- The FindOpenCL module now provides imported targets.
- The FindOpenMP module learned to detect the OpenMP
version (specification date) from the compiler.
- A FindVulkan module was added.
- The GenerateExportHeader module learned a new
CUSTOM_CONTENT_FROM_VARIABLE option to specify a variable
containing custom content for inclusion in the generated header.
- The GNUInstallDirs module gained a new
GNUInstallDirs_get_absolute_install_dir() command.
- The UseJava module gained APIs to “export” jar targets
for use by external CMake projects. See the install_jar_exports
and export_jars functions.
- cmake(1) gained a -E capabilities option to provide a
machine-readable (JSON) description of the capabilities of the
cmake tool (available generators, etc.).
- A new cmake-server(7) mode was added to provide semantic
information about a CMake-generated buildsystem to clients through
a JSON protocol. Currently all protocols are experimental and subject
to change.
- The cmake(1) command learned a --trace-source=<file> option.
- ccmake(1) learned to support vim-like navigation bindings.
- cmake-gui(1) gained a button to open the generated project file
for Visual Studio Generators and the Xcode generator.
We no longer provide Linux i386 binaries for download from cmake.org
for new versions of CMake.
Vim support files cmake-indent.vim, cmake-syntax.vim, and
cmake-help.vim have been removed in favor of the files now provided
from the vim-cmake-syntax project.
Support for building CMake itself with some compilers was dropped:
- Visual Studio 7.1 and 2005 – superseded by VS 2008 and above
- MinGW.org mingw32 – superseded by MSYS2 mingw32 and mingw64
CMake still supports generating build systems for other projects using
these compilers.
- The Fortran dependency scanner learned to support the syntax of
Fortran Submodules.
- Vim support files indent/cmake.vim and syntax/cmake.vim
from the vim-cmake-syntax project are now distributed with CMake.