Changes made since CMake 3.0.0 include the following.
- Generators for Visual Studio 11 (2012) and above learned to generate
projects for Windows Phone and Windows Store. One may set the
CMAKE_SYSTEM_NAME variable to WindowsPhone
or WindowsStore on the cmake(1) command-line
or in a CMAKE_TOOLCHAIN_FILE to activate these platforms.
Also set CMAKE_SYSTEM_VERSION to 8.0 or 8.1 to
specify the version of Windows to be targeted.
- Generators for Visual Studio 10 (2010) and above learned to generate
projects for NVIDIA Nsight Tegra Visual Studio Edition. One may set
the CMAKE_SYSTEM_NAME variable to Android on the
cmake(1) command-line or in a CMAKE_TOOLCHAIN_FILE
to activate this platform.
- The Visual Studio generators for versions 8 (2005) and above
learned to read the target platform name from a new
CMAKE_GENERATOR_PLATFORM variable when it is
not specified as part of the generator name. The platform
name may be specified on the cmake(1) command line
with the -A option, e.g. -G "Visual Studio 12 2013" -A x64.
- The CMAKE_GENERATOR_TOOLSET variable may now be
initialized in a toolchain file specified by the
CMAKE_TOOLCHAIN_FILE variable. This is useful
when cross-compiling with the Xcode or Visual Studio
generators.
- The CMAKE_INSTALL_MESSAGE variable was introduced to
optionally reduce output installation.
- The BundleUtilities module learned to resolve and replace
@rpath placeholders on OS X to correctly bundle applications
using them.
- The CMakePackageConfigHelpers module
configure_package_config_file() command learned a new
INSTALL_PREFIX option to generate package configuration files
meant for a prefix other than CMAKE_INSTALL_PREFIX.
- The CheckFortranSourceCompiles module was added to
provide a CHECK_Fortran_SOURCE_COMPILES macro.
- The ExternalData module learned to tolerate a DATA{}
reference to a missing source file with a warning instead of
rejecting it with an error. This helps developers write new
DATA{} references to test reference outputs that have not
yet been created.
- The ExternalProject module learned to support lzma-compressed
source tarballs with .7z, .tar.xz, and .txz extensions.
- The ExternalProject module ExternalProject_Add command
learned a new BUILD_ALWAYS option to cause the external project
build step to run every time the host project is built.
- The ExternalProject module ExternalProject_Add command
learned a new EXCLUDE_FROM_ALL option to cause the external
project target to have the EXCLUDE_FROM_ALL target
property set.
- The ExternalProject module ExternalProject_Add_Step command
learned a new EXCLUDE_FROM_MAIN option to cause the step to not be
a direct dependency of the main external project target.
- The ExternalProject module ExternalProject_Add command
learned a new DOWNLOAD_NO_PROGRESS option to disable progress
output while downloading the source tarball.
- The FeatureSummary module feature_summary API
learned to accept multiple values for the WHAT option and
combine them appropriately.
- The FindCUDA module learned to support fatbin and cubin
modules.
- The FindGTest module gtest_add_tests macro learned
a new AUTO option to automatically read the SOURCES
target property of the test executable and scan the source files
for tests to be added.
- The FindGLEW module now provides imported targets.
- The FindGLUT module now provides imported targets.
- The FindHg module gained a new Hg_WC_INFO macro to
help run hg to extract information about a Mercurial work copy.
- The FindOpenCL module was introduced.
- The FindOpenGL module now provides imported targets
OpenGL::GL and OpenGL::GLU when the libraries are found.
- The FindOpenMP module learned to support Fortran.
- The FindPkgConfig module learned to use the PKG_CONFIG
environment variable value as the pkg-config executable, if set.
- The FindZLIB module now provides imported targets.
- The GenerateExportHeader module generate_export_header
function learned to allow use with Object Libraries.
- The InstallRequiredSystemLibraries module gained a new
CMAKE_INSTALL_OPENMP_LIBRARIES option to install MSVC OpenMP
runtime libraries.
- The UseSWIG module learned to detect the module name
from .i source files if possible to avoid the need to set
the SWIG_MODULE_NAME source file property explicitly.
- The WriteCompilerDetectionHeader module was added to allow
creation of a portable header file for compiler optional feature detection.
- New COMPILE_FEATURES
generator expression allows
setting build properties based on available compiler features.
- The ctest_coverage() command learned to read variable
CTEST_COVERAGE_EXTRA_FLAGS to set CoverageExtraFlags.
- The ctest_coverage() command learned to support
Intel coverage files with the codecov tool.
- The ctest_memcheck() command learned to support sanitizer
modes, including AddressSanitizer, MemorySanitizer,
ThreadSanitizer, and UndefinedBehaviorSanitizer.
Options may be set using the new
CTEST_MEMORYCHECK_SANITIZER_OPTIONS variable.
- cpack(1) gained an IFW generator to package using
Qt Framework Installer tools. See the CPackIFW module.
- cpack(1) gained 7Z and TXZ generators supporting
lzma-compressed archives.
- The CPackDeb module learned a new
CPACK_DEBIAN_COMPRESSION_TYPE variable to set the
tarball compression type.
- The cpack(1) WiX generator learned to support
a CPACK_WIX_ACL installed file property to
specify an Access Control List.
- The cmake(1) -E option learned a new env command.
- The cmake(1) -E tar command learned to support
lzma-compressed files.
- Object Libraries may now have extra sources that do not
compile to object files so long as they would not affect linking
of a normal library (e.g. .dat is okay but not .def).
- Visual Studio generators for VS 8 and later learned to support
the ASM_MASM language.
- The Visual Studio generators learned to treat .hlsl source
files as High Level Shading Language sources (using FXCompile
in .vcxproj files). A VS_SHADER_TYPE source file
property was added to specify the Shader Type.
In CMake 3.0 the target_link_libraries() command
accidentally began allowing unquoted arguments to use
generator expressions
containing a (; separated) list within them. For example:
set(libs B C)
target_link_libraries(A PUBLIC $<BUILD_INTERFACE:${libs}>)
This is equivalent to writing:
target_link_libraries(A PUBLIC $<BUILD_INTERFACE:B C>)
and was never intended to work. It did not work in CMake 2.8.12.
Such generator expressions should be in quoted arguments:
set(libs B C)
target_link_libraries(A PUBLIC "$<BUILD_INTERFACE:${libs}>")
CMake 3.1 again requires the quotes for this to work correctly.
Callbacks established by the variable_watch() command will no
longer receive the ALLOWED_UNKNOWN_READ_ACCESS access type when
the undocumented CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS variable is
set. Uninitialized variable accesses will always be reported as
UNKNOWN_READ_ACCESS.
The CMakeDetermineVSServicePack module now warns that
it is deprecated and should not longer be used. Use the
CMAKE_<LANG>_COMPILER_VERSION variable instead.
The FindITK module has been removed altogether.
It was a thin-wrapper around find_package(ITK ... NO_MODULE).
This produces much clearer error messages when ITK is not found.
The FindVTK module has been removed altogether.
It was a thin-wrapper around find_package(VTK ... NO_MODULE).
This produces much clearer error messages when VTK is not found.
The module also provided compatibility support for finding VTK 4.0.
This capability has been dropped.
- The cmake-gui(1) learned to capture output from child
processes started by the execute_process() command
and display it in the output window.
- The cmake-language(7) internal implementation of generator
expression and list expansion parsers have been optimized and shows
non-trivial speedup on large projects.
- The Makefile generators learned to use response files with GNU tools
on Windows to pass library directories and names to the linker.
- When generating linker command-lines, CMake now avoids repeating
items corresponding to SHARED library targets.
- Support for the Open Watcom compiler has been overhauled.
The CMAKE_<LANG>_COMPILER_ID is now OpenWatcom,
and the CMAKE_<LANG>_COMPILER_VERSION now uses
the Open Watcom external version numbering. The external
version numbers are lower than the internal version number
by 11.
- The cmake-mode.el major Emacs editing mode no longer
treats _ as part of words, making it more consistent
with other major modes.