* Windows Phone and Windows Store support has been added to Visual Studio 11
(2012) and above Generators.

* NVIDIA Nsight Tegra support has been added to Visual Studio 10 (2010) and
above Generators.

* New "target_compile_features" command allows populating target based compile
features. CMake uses this information to ensure that the compiler in use is
capable of building the target, and to add any necessary compile flags
such as -std=gnu++11 to support language features.
More information on this is found at:
– http://www.cmake.org/cmake/help/v3.1/manual/cmake-compile-features.7.html

* The syntax for *Variable References* and *Escape Sequences* was simplified in
order to allow a much faster implementation. See policy "CMP0053".

* The "if" command no longer automatically dereferences variables named in
quoted or bracket arguments. See policy "CMP0054".

* The target property "SOURCES" now generally supports "Generator Expressions".
The generator expressions may be used in the "add_library" and
"add_executable" commands.

* It is now possible to write and append to the target property "SOURCES".
The variable "CMAKE_DEBUG_TARGET_PROPERTIES" can be used to trace the
origin of sources.

* 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.

NVIDIA Nsight Tegra
~~~~~~~~~~~~~~~~~~~

* 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.

Syntax
——

* The "cmake-language(7)" syntax for *Variable References* and
*Escape Sequences* was simplified in order to allow a much faster
implementation. See policy "CMP0053".

* The "if()" command no longer automatically dereferences variables
named in quoted or bracket arguments. See policy "CMP0054".

Commands
——–

* The "add_custom_command()" command learned to interpret "cmake-
generator-expressions(7)" in arguments to "DEPENDS".

* The "export(PACKAGE)" command learned to check the
"CMAKE_EXPORT_NO_PACKAGE_REGISTRY" variable to skip exporting the
package.

* The "file(STRINGS)" command gained a new "ENCODING" option to
enable extraction of "UTF-8" strings.

* The "find_package()" command learned to check the
"CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" and
"CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY" variables to skip
searching the package registries.

* The "install()" command learned a "MESSAGE_NEVER" option to avoid
output during installation.

* The "string()" command learned a new "GENEX_STRIP" subcommand
which removes "generator expression".

* The "string()" command learned a new "UUID" subcommand to generate
a univerally unique identifier.

* New "target_compile_features()" command allows populating the
"COMPILE_FEATURES" target property, just like any other build
variable.

* The "target_sources()" command was added to add to the "SOURCES"
target property.

Variables
———

* 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.

* New "CXX_STANDARD" and "CXX_EXTENSIONS" target properties may
specify values which CMake uses to compute required compile options
such as "-std=c++11" or "-std=gnu++11". The "CMAKE_CXX_STANDARD" and
"CMAKE_CXX_EXTENSIONS" variables may be set to initialize the target
properties.

* New "C_STANDARD" and "C_EXTENSIONS" target properties may specify
values which CMake uses to compute required compile options such as
"-std=c11" or "-std=gnu11". The "CMAKE_C_STANDARD" and
"CMAKE_C_EXTENSIONS" variables may be set to initialize the target
properties.

* New "COMPILE_FEATURES" target property may contain a list of
features required to compile a target. CMake uses this information
to ensure that the compiler in use is capable of building the
target, and to add any necessary compile flags to support language
features.

* New "COMPILE_PDB_NAME" and "COMPILE_PDB_OUTPUT_DIRECTORY" target
properties were introduced to specify the MSVC compiler program
database file location ("cl /Fd"). This complements the existing
"PDB_NAME" and "PDB_OUTPUT_DIRECTORY" target properties that specify
the linker program database file location ("link /pdb").

* 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 "FindVTK" module dropped support for finding VTK 4.0. It is
now a thin-wrapper around "find_package(VTK … NO_MODULE)". This
produces much clearer error messages when VTK is not found.

* The "FindZLIB" module now provides imported targets.

* The "GenerateExportHeader" module "generate_export_header"
function learned to allow use with *Object Libraries*.

* 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.

* 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.

Other Changes
=============

* 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.

* 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.