CMake 3.3 Release Notes¶
Contents
Changes made since CMake 3.2 include the following.
New Features¶
Generators¶
- The Makefile Generators now add
.DELETE_ON_ERROR
to the makefiles that contain the actual build rules for files on disk. This tells GNU make to remove rule outputs when their recipe modifies an output but fails. - The Visual Studio Generators learned to support
.xaml
source files and automatically associate them with corresponding.h
and.cpp
sources. - A new experimental
Green Hills MULTI
generator was added on Windows. Green Hills MULTI is an IDE for embedded real-time systems.
Commands¶
- The
add_dependencies()
command learned to allow dependencies to be added to interface libraries. Dependencies added to an interface library are followed transitively in its place since the target itself does not build. - The
execute_process()
command learned to support specifying the same file forOUTPUT_FILE
andERROR_FILE
. - The
file(GLOB)
andfile(GLOB_RECURSE)
commands learned a newLIST_DIRECTORIES <bool>
option to specify whether the glob result should include directories. - The
find_library()
,find_path()
, andfind_file()
commands now search in installation prefixes derived from thePATH
environment variable. - The
if()
command learned a newIN_LIST
operator that evaluates to true if a given element is contained in a named list. - The
install(EXPORT)
andexport()
commands learned to export targets that populate theINTERFACE_SOURCES
target property. - The
install(TARGETS)
command learned to support generator expressions in theDESTINATION
value.
Variables¶
- The version of some Fortran compilers is now detected and stored in the
CMAKE_Fortran_COMPILER_VERSION
variable. - The Visual Studio Generators learned a new
CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
option to put theINSTALL
target in the default build of a solution (.sln
) file.
Properties¶
- A
CROSSCOMPILING_EMULATOR
target property and supportingCMAKE_CROSSCOMPILING_EMULATOR
variable were introduced to allow target platform binaries to run on the host during cross compiling. - A
<LANG>_INCLUDE_WHAT_YOU_USE
target property and supportingCMAKE_<LANG>_INCLUDE_WHAT_YOU_USE
variable were introduced to tell the Makefile Generators and theNinja
generator to runinclude-what-you-use
along with the compiler forC
andCXX
languages. - The
<LANG>_VISIBILITY_PRESET
andVISIBILITY_INLINES_HIDDEN
target properties now affect compilation in sources of all target types. See policyCMP0063
. - The
XCODE_ATTRIBUTE_<an-attribute>
target property learned to support generator expressions.
Modules¶
- The
CheckFortranCompilerFlag
module was introduced to checkFortran
compiler flags, much like theCheckCCompilerFlag
module already does forC
. - The
ExternalData
module learned a newExternalData_NO_SYMLINKS
option to disable use of symbolic links to populate the real data files and use copies instead. - The
ExternalData
module learned a newRECURSE:
option inDATA{}
references specifying directories. This allows an entire directory tree of associated files to be matched. - The
ExternalData
module learned a new URL template placeholder%(algo:<key>)
to allow custom mapping from algorithm name to URL component through configuration of newExternalData_URL_ALGO_<algo>_<key>
variables. This allows more flexibility in remote URLs. - The
ExternalProject
module learned to replace tokens like<BINARY_DIR>
in theBYPRODUCTS
of each step. - The
ExternalProject
module APIs learned to supportgenerator expressions
when usingLOG_*
options and in CMake initial cache options. - The
FindBoost
module now tracks the directories containing libraries separately for RELEASE and DEBUG configurations. - The
FindCUDA
module now defaults to using the static CUDA runtime library if it is available. A newCUDA_USE_STATIC_CUDA_RUNTIME
option is offered to control this behavior. - The
FindMatlab
module was completely rewritten. It learned about versions and components and to find Matlab in a more precise and multiplatform way. The module now offers APIs to create mex extensions, documentation, and unit tests. - The
FindPackageHandleStandardArgs
moduleFIND_PACKAGE_HANDLE_STANDARD_ARGS
function now always populates both the<PackageName>_FOUND
and<UPPERCASE_NAME>_FOUND
variables (the latter for backwards compatibility). TheFOUND_VAR
option is now ignored except to enforce its allowed values. - The
InstallRequiredSystemLibraries
module learned a newCMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT
option to specify the installation component.
Generator Expressions¶
- A new
COMPILE_LANGUAGE
generator expression was introduced to allow specification of compile options for target files based on theLANGUAGE
of each source file. Due to limitations of the underlying native build tools, this feature has varying support across generators. See thecmake-generator-expressions(7)
manual for details.
CTest¶
- The
ctest(1)
tool learned a new--repeat-until-fail <n>
option to help find sporadic test failures. - The
CTestCoverageCollectGCOV
module learned to support the sameCTEST_CUSTOM_COVERAGE_EXCLUDE
option as thectest_coverage()
command.
CPack¶
- The
cpack(1)
IFW
generator and theCPackIFW
module learned to support Qt Framework Installer 2.0 tools. - The
CPackDeb
module learned a newCPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS
variable to specify per-component use ofdpkg-shlibdeps
. - The
CPackDeb
module learned a newCPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS
option to specify per-component dependencies. - The
CPackRPM
module learned to package symbolic links more cleanly and now supports directory symlinks with recentrpmbuild
versions. - The
CPackRPM
module learned a newCPACK_RPM_ADDITIONAL_MAN_DIRS
variable to specify directories containing man pages for the brp-compress RPM macro. - The
CPackRPM
module learned a newCPACK_RPM_<component>_PACKAGE_ARCHITECTURE
variable to specify a component-specific package architecture. - The CPack WIX generator learned the new
CPACK_START_MENU_SHORTCUTS
,CPACK_DESKTOP_SHORTCUTS
andCPACK_STARTUP_SHORTCUTS
installed file properties which can be used to install shorcuts in the Start Menu, on the Desktop and in the Startup Folder respectively.
Other¶
- The
Compile Features
functionality is now aware of features supported by GNU compilers on Windows, versions 4.4 through 5.0. - The
cmake(1)
-E tar
command learned a new--format<format>
option to specify the archive format to be written. - On OS X, CMake learned to create XCTest bundles to test Frameworks
and App Bundles within Xcode. The
FindXCTest
module provides convenience functions to handleXCTEST
bundles.
Deprecated and Removed Features¶
On OS X the
cmake-gui(1)
no longer has theInstall For Command Line Use
menu item. Instead there is aHow to Install For Command Line Use
menu item that shows an informational dialog box explaining how to make the command line tools available. For example:/Applications/CMake.app/Contents/bin/cmake-gui --install
The
ctest_build()
andbuild_command()
commands no longer tellmake
tools to ignore errors with the-i
option. Previously this was done for Makefile Generators but not others. See policyCMP0061
.The
Visual Studio 10 2010
generator no longer checks for running VS IDEs with the project open or asks them to reload. This was originally done for VS 10 because it had been done for VS 7 through 9 to avoid prompting for every project in a solution. Since VS >= 10 allow the whole solution to reload at once they do not need CMake to help them.The
Visual Studio 7
generator (.NET 2002) is now deprecated and will be removed in a future version of CMake.The
Visual Studio 6
generator is now deprecated and will be removed in a future version of CMake.The
find_package()
command no longer considers project build trees recently configured in acmake-gui(1)
. This was previously done only on Windows and is now never done. TheNO_CMAKE_BUILDS_PATH
option is now ignored if given and effectively always on. Projects may populate the User Package Registry to aid users building multiple dependent projects one after another.The
add_definitions()
command no longer causes aDEFINITIONS
directory property to be populated. See policyCMP0059
.With Visual Studio 7, 8, and 9 generators the value of the
$(OutDir)
placeholder no longer evaluates to the configuration name. Projects should use$(ConfigurationName)
for that instead.Using the output of
export()
with theinstall(FILES)
command is no longer allowed. See policyCMP0062
for details.
Other Changes¶
- The
Ninja
generator now requires that calls to theadd_custom_command()
andadd_custom_target()
commands use theBYPRODUCTS
option to explicitly specify any files generated by the custom commands that are not listed as outputs (perhaps because their timestamps are allowed to be older than the inputs). See policyCMP0058
. - Build-time progress output of Makefile Generators has been improved. It no longer mixes progress and build rule messages during parallel builds. The link rule messages now have progress and are displayed as bold green instead of bold red (since red is often associated with an error message).
- The
CMAKE_CFG_INTDIR
variable value for Visual Studio 7, 8, and 9 is now$(ConfigurationName)
instead of$(OutDir)
. This should have no effect on the intended use cases of the variable. - Linking to library files by a full path in an implicit linker search
directory (e.g.
/usr/lib/libfoo.a
) no longer asks the linker to search for the library (e.g.-lfoo
) and now links by full path. See policyCMP0060
.