Changes made since CMake 3.7 include the following.
CMake learned to support
CSharp (C#) as a first-class language that can be enabled via the
enable_language commands. It is currently supported by the
Visual Studio Generators for VS 2010 and above.
C# assemblies and programs can be added just like common C++ targets using the
add_executable commands. References between C# targets in the same source tree may be specified by
target_link_libraries like for C++. References to system or 3rd-party assemblies may be specified by the target properties :prop_tgt:VS_DOTNET_REFERENCE_<refname> and :prop_tgt:VS_DOTNET_REFERENCES.
More fine tuning of C# targets may be done using target and source file properties. Specifically the target properties related to Visual Studio (
VS_*) are worth a look (for setting toolset versions, root namespaces, assembly icons, ...).
CUDAas a first-class language that can be enabled via the
CUDAis currently supported by the
Makefile Generatorsand the
Ninjagenerator on Linux, macOS, and Windows. Support for the Visual Studio IDE is under development but not included in this release.
nvcc) is supported.
Compile Features <cmake-compile-features(7)>functionality now offers meta-features that request compiler modes for specific language standard levels (e.g.
cxx_std_11). See :prop_gbl:CMAKE_C_KNOWN_FEATURES and :prop_gbl:CMAKE_CXX_KNOWN_FEATURES.
Compile Features <cmake-compile-features(7)>functionality is now aware of C++ 17. No specific features are yet enumerated besides the
Compile Features <cmake-compile-features(7)>functionality is now aware of the availability of C99 in gcc since version 3.4.
CodeBlocksextra generator may now be used to generate with
NMake Makefiles JOM.
Visual Studio Generatorsfor VS 2013 and above learned to support a
host=x64option in the
CMAKE_GENERATOR_TOOLSETvalue (e.g. via the
-Toption) to request use of a VS 64-bit toolchain on 64-bit hosts.
Visual Studio Generatorslearned to treat files passed to
target_link_librarieswhose names end in
.targetsas MSBuild "targets" files to be imported into generated project files.
add_custom_targetcommands learned the option
COMMAND_EXPAND_LISTSwhich causes lists in the
COMMANDargument to be expanded, including lists created by generator expressions.
execute_processcommand gained an
ENCODINGoption to specify on Windows which encoding is used for output from child process.
math(EXPR)command gained support for unary
PREFIXoptions to add groups following source tree directory structure.
string(TIMESTAMP)command learned to treat
%%as a way to encode plain
string(TIMESTAMP)command will now honor the
SOURCE_DATE_EPOCHenvironment variable and use its value instead of the current time.
try_compilecommand source file signature gained new options to specify the language standard to use in the generated test project.
try_compilecommand source file signature now honors language standard variables like
CMAKE_CXX_STANDARD. See policy
CMAKE_CODELITE_USE_TARGETSvariable was added to tell the
CodeLiteextra generator to change the generated project to have target-centric organization. The
CodeLitethen work on a selected target rather than the whole workspace. (Note that the
Ninjaclean operation on a target includes its dependencies, though.)
CMAKE_SUBLIME_TEXT_2_ENV_SETTINGSvariable was added to tell the
Sublime Text 2extra generator to place specified environment variables in the generated
CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREEvariable was added to tell the
Sublime Text 2extra generator whether to exclude the build tree from the
.sublime-projectwhen it is inside the source tree.
CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILDvariable was added to tell
Visual Studio Generatorsfor VS 2010 and above to include the
PACKAGEtarget in the default build, similar to the existing
CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILDvariable for the
CMAKE_BUILD_RPATHvariable were added to support custom
RPATHlocations to be added to binaries in the build tree.
generator expressions <cmake-generator-expressions(7)>.
Imported <Imported Targets>
Interface Librarieslearned new :prop_tgt:IMPORTED_LIBNAME and :prop_tgt:IMPORTED_LIBNAME_<CONFIG> target properties to specify a link library name since interface libraries do not build their own library files.
CMAKE_<LANG>_CPPLINTvariable were introduced to tell the
Makefile Generatorsand the
Ninjagenerator to run the
cpplintstyle checker along with the compiler for
Imported <Imported Targets>
Visual Studio Generatorsfor VS 2010 and above whether or not a file should e copied to the output directory.
Visual Studio Generatorsfor VS 2010 and above what debugger working directory should be set for the target.
Visual Studio Generatorsfor VS 2010 and above to add a .NET reference with a given hint path.
Visual Studio Generatorsfor VS 2010 and above whether to include the file in a Visual Studio extension package.
Visual Studio Generatorsfor VS 2010 and above a setting for the resource generator (
Visual Studio Generatorsfor VS 2010 and above to use a custom MSBuild user
Xcodegenerator whether to emit the
EFFECTIVE_PLATFORM_NAMEvariable. This is useful when building with multiple SDKs like
Xcodegenerator to use custom values of the corresponding attributes for a target in the generated Xcode project.
CSharpUtilitiesmodule was added to aid parameterization of Visual Studio C# targets. It provides functions to allow automated setting of source file properties to support Windows Forms, WPF/XAML or other technologies as needed.
ExternalDatamodule learned to support multiple content links for one data file using different hashes, e.g.
img.png.sha1. This allows objects to be fetched from sources indexed by different hash algorithms.
ExternalProjectmodule gained the
GIT_PROGRESSoption to force Git to show progress when cloning repositories.
ExternalProjectmodule gained a
GIT_CONFIGoption to pass
--configoptions to Git when cloning repositories.
feature_summarycommand now accepts a new
QUIET_ON_EMPTYoption that suppresses the output when the list of packages that belong to the selected category is empty.
add_feature_infocommand now accepts lists of dependencies for deciding whether a feature is enabled or not.
FeatureSummarymodule can now be tweaked by changing the
FindOpenGLmodule now provides imported targets
OpenGL::GLUwhen the libraries are found.
UseSWIGmodule gained a
swig_add_librarycommand to give more flexibility over the old
swig_add_source_to_modulecommand learned a new
SWIG_OUTFILE_DIRoption to control the output file location (
WriteCompilerDetectionHeadermodule gained the
ALLOW_UNKNOWN_COMPILER_VERSIONSoptions that allow creation of headers that will work also with unknown or old compilers by simply assuming they do not support any of the requested features.
ctest_memcheckcommand gained a
DEFECT_COUNT <var>option to capture the number of memory defects detected.
ctest_memcheckcommand learned to read the location of suppressions files for sanitizers from the
ctest_memcheckcommand learned to support
CDASH_UPLOADsignature was taught to honor the
CPackIFWConfigureFilemodule was added to define a new
cpack_ifw_configure_filecommand to configure file templates prepared in QtIFW/SDK/Creator style.
cpack_ifw_configure_component_groupcommands gained a new
TRANSLATIONSoptions to more specific configuration.
cpack_ifw_configure_componentcommand gained a new
cpack_ifw_configure_component_groupcommand gained a new
DEPENDENCIESalias also added.
PRIORITYoption now is deprecated and will be removed in a future version of CMake. Please use new
CPACK_IFW_PACKAGE_TITLE_COLORvariables to customize a QtIFW installer look.
rpmbuildtool. If unsupported tags are set they are ignored and a developer warning is printed out.
debuginfopackage on demand even if components packaging is used. See
$<IF:cond,true-value,false-value>was added. It resolves to the true-value if the condition is
1and resolves to the false-value if the condition is
print_disabled_featuresare now deprecated.
swig_add_modulecommand is now deprecated in favor of
ctest_memcheckcommand no longer automatically adds
leak_check=1to the options used by
AddressSanitizer. The default behavior of
AddressSanitizeris to run LeakSanitizer to check leaks unless
ctest_memcheckcommand was fixed to correctly append extra sanitizer options read from the
CTEST_MEMORYCHECK_SANITIZER_OPTIONSvariable to the environment variables used internally by the sanitizers.
set_package_propertiescommand no longer forces the package type to
OPTIONALwhen the type is not explicitly set.
Compile Features <cmake-compile-features(7)>functionality is now aware of features supported by Intel C++ compilers versions 12.1 through 17.0 on UNIX and Windows platforms.
pkg_check_modulescommand following a successful call learned to re-evaluate the cached values for a given prefix after changes to the parameters to the command for that prefix.
ui_*are placed in the
<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/includedirectory which is automatically added to the target's :prop_tgt:INCLUDE_DIRECTORIES. It is therefore not necessary anymore to have
CMAKE_CURRENT_BINARY_DIRin the target's :prop_tgt:INCLUDE_DIRECTORIES.
Sublime Text 2generator no longer runs the native build command (e.g.
make) with verbose build output enabled.
try_compilecommand source file signature now honors the
CMAKE_WARN_DEPRECATEDvariable value in the generated test project.
Visual Studio Generatorsfor VS 2010 and above now place per-source file flags after target-wide flags when they are classified as raw flags with no project file setting (
AdditionalOptions). This behavior is more consistent with the ordering of flags produced by other generators, and allows flags on more-specific properties (per-source) to override those on more general ones (per-target).
cmake.orgnow records the installation directory in the Windows Registry under the key
HKLM\Software\Kitware\CMakewith a value named