CMake 3.18 Release Notes¶
Contents
Changes made since CMake 3.17 include the following.
New Features¶
Languages¶
The
CUDA
language can now be compiled using Clang on non-Windows platforms. Separable compilation is not yet supported on any platform.
Command-Line¶
Commands¶
The
add_library()
andadd_executable()
commands learned to create Alias Targets referencing non-GLOBAL
Imported Targets.The
cmake_language()
command was added for meta-operations on scripted or built-in commands, starting with a mode toCALL
other commands, andEVAL CODE
to inplace evaluate a CMake script.The
execute_process()
command gained theECHO_OUTPUT_VARIABLE
andECHO_ERROR_VARIABLE
options.The
export()
command now raise an error if used multiple times with sameFILE
withoutAPPEND
. See policyCMP0103
.The
file()
command gained theARCHIVE_CREATE
andARCHIVE_EXTRACT
subcommands to expose thecmake(1)
-E tar
functionality to CMake scripting code.The
file(CONFIGURE)
subcommand was created in order to replicate theconfigure_file()
functionality without resorting to a pre-existing file on disk as input. The content is instead passed as a string.The
file(UPLOAD)
command gainedTLS_VERIFY
andTLS_CAINFO
options to control server certificate verification.The
find_program()
,find_library()
,find_path()
andfind_file()
commands gained a newREQUIRED
option that will stop processing with an error message if nothing is found.The
get_property()
command withSOURCE
scope gained theDIRECTORY
andTARGET_DIRECTORY
options to get a property from the provided directory scope.The
get_source_file_property()
command gained theDIRECTORY
andTARGET_DIRECTORY
options to get a property from the provided directory scope.The
list()
operationSORT
gained theNATURAL
sort option to sort using natural order (seestrverscmp(3)
manual).The
set_property()
command with theSOURCE
scope gained theDIRECTORY
andTARGET_DIRECTORY
options to set properties in the provided directory scopes.The
set_source_files_properties()
command gained theDIRECTORY
andTARGET_DIRECTORY
options to set properties in the provided directory scopes.The
string()
command learned a newHEX
sub-command, which converts strings into their hexadecimal representation.
Variables¶
A
CMAKE_CUDA_ARCHITECTURES
variable was added to specify CUDA output architectures. Users are encouraged to use this instead of specifying options manually, as this approach is compiler-agnostic. The variable is initialized automatically whenCMAKE_CUDA_COMPILER_ID
isNVIDIA
. The variable is used to initialize the newCUDA_ARCHITECTURES
target property. See policyCMP0104
.The
CMAKE_PCH_WARN_INVALID
variable was added to initialize thePCH_WARN_INVALID
target property to allow the removal of the precompiled header invalid warning.
Properties¶
The
CUDA_ARCHITECTURES
target property was added to specify CUDA output architectures. Users are encouraged to use this instead of specifying options manually, as this approach is compiler-agnostic. The property is initialized by the newCMAKE_CUDA_ARCHITECTURES
variable. See policyCMP0104
.The
Fortran_PREPROCESS
target property andFortran_PREPROCESS
source-file property were added to control preprocessing of Fortran source files.The
FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
target property and associatedCMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>
variable were created to allow adding a postfix to the name of a framework file name when using a multi-config generator.The
OBJECT_OUTPUTS
source file property now supportsgenerator expressions
.The
PCH_WARN_INVALID
target property was added to allow the removal of the precompiled header invalid warning.The
UNITY_BUILD_MODE
target property was added to tell generators which algorithm to use for grouping included source files.The
VS_SOURCE_SETTINGS_<tool>
target property was added to tell Visual Studio Generators for VS 2010 and above to add metadata to non-built source files using<tool>
.The
VS_SETTINGS
source file property was added to tell Visual Studio Generators for VS 2010 and above to add metadata to a non-built source file.The
VS_PLATFORM_TOOLSET
target property was added to tell Visual Studio Generators for VS 2010 and above to override the platform toolset.The
VS_SOLUTION_DEPLOY
target property was added to tell Visual Studio Generators for VS 2010 and above to mark a target for deployment even when not building for Windows Phone/Store/CE.
Modules¶
The
CheckLinkerFlag
module has been added to provide a facility to check validity of link flags.The
ExternalProject
moduleExternalProject_Add()
command gained a newGIT_REMOTE_UPDATE_STRATEGY
keyword. This can be used to specify how failed rebase operations during a git update should be handled. TheCMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY
variable was also added as a global default and is honored by both theExternalProject
andFetchContent
modules.The
FetchContent
moduleFetchContent_Declare()
command now supports aSOURCE_SUBDIR
option. It can be used to directFetchContent_MakeAvailable()
to look in a different location for theCMakeLists.txt
file.The
FindBLAS
module now provides an imported target.The
FindCUDAToolkit
module:gained the variable
CUDAToolkit_LIBRARY_ROOT
, which is the directory containing thenvvm
directory andversion.txt
.uses toolkit and library root found during
CUDA
compiler detection.
The
FindLAPACK
module now provides an imported target.The
FindPython3
,FindPython2
andFindPython
modules:gained the possibility to create per-artifact cache variables for interactive editing in
cmake-gui(1)
andccmake(1)
.gained sub-components
Development.Module
andDevelopment.Embed
under theDevelopment
component.gained the capability to specify which Python implementations to find, including
IronPython
andPyPy
.
The
FindRuby
module input and output variables were all renamed fromRUBY_
toRuby_
for consistency with other find modules. Input variables of the old case will be honored if provided, and output variables of the old case are always provided.The
FindSWIG
module now accepts target languages asCOMPONENTS
andOPTIONAL_COMPONENTS
arguments tofind_package
.The
GoogleTest
modulegtest_discover_tests()
command:gained a new
DISCOVERY_MODE
option to control when the test discovery step is run. It offers a newPRE_TEST
setting to run the discovery at test time instead of build time. A newCMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE
variable can be used to change the default globally.gained a new optional parameter
XML_OUTPUT_DIR
. When set the JUnit XML test results are stored in that directory.
The
FindLibXslt
module now provides imported targets.The
UseSWIG
module now supports Fortran as a target language if theSWIG_EXECUTABLE
is SWIG-Fortran.
Generator Expressions¶
The
$<DEVICE_LINK:...>
and$<HOST_LINK:...>
generator expressions
were added to manage device and host link steps.The
$<LINK_LANGUAGE:...>
and$<LINK_LANG_AND_ID:...>
generator expressions
were added.
CTest¶
ctest(1)
gained a newCTEST_RESOURCE_SPEC_FILE
variable, which can be used to specify a resource specification file.ctest(1)
gained a--stop-on-failure
option, which can be used to stop running the tests once one has failed.The
ctest_test()
command gained aSTOP_ON_FAILURE
option which can be used to stop running the tests once one has failed.The
CTestCoverageCollectGCOV
modulectest_coverage_collect_gcov()
command gained aTARBALL_COMPRESSION
option to control compression of the tarball of collected results.
CPack¶
The
CPack Archive Generator
’sTXZ
format learned theCPACK_ARCHIVE_THREADS
variable to enable parallel compression. Requires support in theliblzma
used by CMake.The
CPack NSIS Generator
gained a new variableCPACK_NSIS_MANIFEST_DPI_AWARE
to declare that the installer is DPI-aware.The
CPack RPM Generator
gainedCPACK_RPM_PRE_TRANS_SCRIPT_FILE
andCPACK_RPM_POST_TRANS_SCRIPT_FILE
variables to specify pre- and post-transaction scripts.
Other¶
cmake-gui(1)
now populates its generator selection widget default value from theCMAKE_GENERATOR
environment variable. Additionally, environment variablesCMAKE_GENERATOR_PLATFORM
andCMAKE_GENERATOR_TOOLSET
are used to populate their respective widget defaults.ccmake(1)
learned to read aCCMAKE_COLORS
environment variable to customize colors.The
Compile Features
functionality is now aware of the availability of C11 features in MSVC 19.27 and 19.28, including support for thec_restrict
,c_static_assert
features and the-std:c11
flag.
Deprecated and Removed Features¶
The
Documentation
module has been deprecated viaCMP0106
. This module was essentially VTK code that CMake should not be shipping anymore.An explicit deprecation diagnostic was added for policy
CMP0070
and policyCMP0071
(CMP0069
and below were already deprecated). Thecmake-policies(7)
manual explains that the OLD behaviors of all policies are deprecated and that projects should port to the NEW behaviors.
Other Changes¶
On Windows, the
Ninja
andNinja Multi-Config
generators, when a compiler is not explicitly specified, now select the first compiler (of any name) found in directories listed by thePATH
environment variable.The
LINK_OPTIONS
andINTERFACE_LINK_OPTIONS
target properties are now used for the device link step. See policyCMP0105
.Creation of an
ALIAS
target overwriting an existing target now raises an error. See policyCMP0107
.Linking a target to itself through an alias now raises an error. See policy
CMP0108
.The
FindPackageHandleStandardArgs
module optionREQUIRED_VARS
is now optional ifHANDLE_COMPONENTS
is specified.The
source_group()
command now also recognizes forward slashes as subgroup delimiters, not just backslashes.ctest(1)
now logs environment variables that it sets for each test, either due to theENVIRONMENT
property or the resource allocation feature, and submits this log to CDash. It does not log environment variables that were set outside of CTest.When building CMake itself from source and not using a system-provided libcurl, HTTP/2 support is now enabled for commands supporting network communication via
http(s)
, such asfile(DOWNLOAD)
,file(UPLOAD)
, andctest_submit()
. The precompiled binaries provided oncmake.org
now support HTTP/2.The
cmake-file-api(7)
“codemodel” version 2version
field has been updated to 2.1.The
cmake-file-api(7)
“codemodel” version 2 “target” object gained a newprecompileHeaders
field in thecompileGroups
objects.
Updates¶
Changes made since CMake 3.18.0 include the following.
3.18.1¶
The
Xcode
generator, whenCMAKE_OSX_ARCHITECTURES
is not defined, now selects$(NATIVE_ARCH_ACTUAL)
as the default architecture (the XcodeARCHS
setting). This is needed for Xcode 12 to select the host’s architecture, which older versions of Xcode did by default.In CMake 3.18.0 the
add_test()
command learned to support special characters in test names. This was accidentally left out of its release notes. Unfortunately the fix breaks existing projects that were using manual quoting or escaping to work around the prior limitation. This fix has been reverted in 3.18.1, but may be re-introduced in future versions of CMake with a policy for compatibility.
3.18.2¶
The default value of
CMAKE_AUTOMOC_PATH_PREFIX
was changed toOFF
because this feature can break existing projects that have identically named header files in different include directories. This restores compatibility with behavior of CMake 3.15 and below. The default was also changed toOFF
in 3.16.9 and 3.17.5.The
Compile Features
functionality was updated for MSVC 19.27 as mentioned above (c_restrict
).
3.18.3¶
The
Compile Features
functionality was updated for MSVC 19.28 as mentioned above (c_static_assert
).