CMake 3.15 Release Notes¶
Contents
Changes made since CMake 3.14 include the following.
New Features¶
Generators¶
- The
Xcodegenerator now supports per-target schemes. See theCMAKE_XCODE_GENERATE_SCHEMEvariable andXCODE_GENERATE_SCHEMEtarget property. - The
Green Hills MULTIgenerator has been updated:- It now supports the
add_custom_command()andadd_custom_target()commands. - It is now available on Linux.
- It now supports the
Languages¶
Preliminary support for the
Swiftlanguage was added to theNinjagenerator:- Use the
SWIFTCenvironment variable to specify a compiler. - The
Swift_DEPENDENCIES_FILEtarget property andSwift_DEPENDENCIES_FILEsource file property were added to customize dependency files. - The
Swift_MODULE_NAMEtarget property was added to customize the Swift module name. - The
Swift_DIAGNOSTICS_FILEsource property was added to indicate where to write the serialised Swift diagnostics.
The Swift support is experimental, not considered stable, and may change in future releases of CMake.
- Use the
Compilers¶
- The
Clangcompiler variant on Windows that targets the MSVC ABI but has a GNU-like command line is now supported. - Support for the Clang-based ARM compiler was added with compiler id
ARMClang. - Support was added for the IAR compiler architectures Renesas RX, RL78, RH850 and Texas Instruments MSP430.
- Support was added for the IAR compilers built for Linux (IAR BuildLx).
Command-Line¶
- The
CMAKE_GENERATORenvironment variable was added to specify a default generator to use whencmake(1)is run without a-Goption. Additionally, environment variablesCMAKE_GENERATOR_PLATFORM,CMAKE_GENERATOR_TOOLSET, andCMAKE_GENERATOR_INSTANCEwere created to configure the generator. - The
cmake(1)--buildtool--targetparameter gained support for multiple targets, e.g.cmake --build . --target Library1 Library2. It now also has a short form-talias, e.g.cmake --build . -t Library1 Library2. - The
cmake(1)command gained a new--installoption. This may be used after building a project to run installation without using the generated build system or the native build tool. - The
cmake(1)command learned a new CLI option--loglevel. - The
cmake(1)-E remove_directorycommand-line tool learned to support removing multiple directories. - The
cmake(1)-E tartool has been improved:- It now continues adding files to an archive even if some of the files
are not readable. This behavior is more consistent with the
classic
tartool. - It now parses all flags, and if an invalid flag was provided, a warning is issued.
- It now displays an error if no action flag was specified, along with a
list of possible actions:
t(list),c(create) orx(extract). - It now supports extracting (
-x) or listing (-t) only specific files or directories. - It now supports Zstandard compression with a
--zstdoption. Zstandard was designed to give a compression ratio comparable to that of the DEFLATE (zip) algorithm, but faster, especially for decompression.
- It now continues adding files to an archive even if some of the files
are not readable. This behavior is more consistent with the
classic
Commands¶
- The
add_custom_command()andadd_custom_target()commands gained a newJOB_POOLoption that works with theNinjagenerator to set the pool variable on the build statement. - The
add_library()commandALIASoption learned to support import libraries of theUNKNOWNtype. - The
cmake_parse_arguments()command gained an additional<prefix>_KEYWORDS_MISSING_VALUESoutput variable to report keyword arguments that were given by the caller with no values. - The
execute_process()command gained aCOMMAND_ECHOoption and supportingCMAKE_EXECUTE_PROCESS_COMMAND_ECHOvariable to enable echoing of the command-line string before execution. - The
file(INSTALL)command learned a new argument,FOLLOW_SYMLINK_CHAIN, which can be used to recursively resolve and install symlinks. list()learned new sub-commands:PREPEND,POP_FRONTandPOP_BACK.- The
message()command learned new types:NOTICE,VERBOSE,DEBUGandTRACE. - The
string()learned a new sub-commandREPEAT.
Variables¶
- The
CMAKE_CROSSCOMPILING_EMULATORvariable and correspondingCROSSCOMPILING_EMULATORtarget property learned to support arguments to the emulator. - The
CMAKE_FIND_PACKAGE_PREFER_CONFIGvariable was added to tellfind_package()calls to look for a package configuration file first even if a find module is available. - The
CMAKE_FRAMEWORKvariable was added to initialize theFRAMEWORKproperty on all targets. - The
CMAKE_VS_JUST_MY_CODE_DEBUGGINGvariable andVS_JUST_MY_CODE_DEBUGGINGtarget property were added to enable the Just My Code feature of the Visual Studio Debugger when compiling with MSVC cl 19.05 and higher. - The
CMAKE_MSVC_RUNTIME_LIBRARYvariable andMSVC_RUNTIME_LIBRARYtarget property were introduced to select the runtime library used by compilers targeting the MSVC ABI. See policyCMP0091. - The
CMAKE_PROJECT_INCLUDEandCMAKE_PROJECT_INCLUDE_BEFOREvariables were added to allow injection of custom code at the sites ofproject()calls without knowing the project name a priori.
Properties¶
- The
ADDITIONAL_CLEAN_FILEStarget property andADDITIONAL_CLEAN_FILESdirectory property were added. They allow to register additional files that should be removed during the clean stage. - The
PUBLIC_HEADERandPRIVATE_HEADERproperties may now be set on Interface Libraries. The headers specified by those properties can be installed using theinstall(TARGETS)command by passing thePUBLIC_HEADERandPRIVATE_HEADERarguments respectively. - The
VS_PACKAGE_REFERENCEStarget property was added to tell Visual Studio Generators to add references tonugetpackages. - The
VS_PROJECT_IMPORTtarget property was added to allow managed Visual Studio project files to import external.propsfiles. - The
VS_NO_SOLUTION_DEPLOYtarget property was added to tell Visual Studio Generators whether to deploy an artifact to the WinCE or Windows Phone target device.
Modules¶
- The
FindBoostmodule was reworked to expose a more consistent user experience between its “Config” and “Module” modes and with other find modules in general.- A new imported target
Boost::headersis now defined (same asBoost::boost). - New output variables
Boost_VERSION_MACRO,Boost_VERSION_MAJOR,Boost_VERSION_MINOR,Boost_VERSION_PATCH, andBoost_VERSION_COUNTwere added. - The
QUIETargument passed tofind_package()is no longer ignored in config mode. Note that the CMake package shipped with Boost1.70.0ignores theQUIETargument passed tofind_package(). This is fixed in the next Boost release. - The input switch
Boost_DETAILED_FAILURE_MSGwas removed. Boost_VERSIONnow reports the version inx.y.zformat in module mode. See policyCMP0093.
- A new imported target
- The
FindCupsmodule now provides imported targets. - The
FindEnvModulesmodule was added to use Lua- and TCL-based environment modules in CTest Scripts. - The
FindGLEWmodule now provides an interface more consistent with what upstream GLEW provides in its own CMake package files. - The
FindPkgConfignow populatesINTERFACE_LINK_OPTIONSproperty of imported targets with other (non-library) linker flags. - The
FindPostgreSQLmodule learned to find debug and release variants separately. - Modules
FindPython3,FindPython2andFindPythongained additional lookup strategies and controls, and a new default. See policyCMP0094. - Modules
FindPython,FindPython2andFindPython3gain a new target (respectivelyPython::Module,Python2::ModuleandPython3::Module) which can be used to develop Python modules. - Modules
FindPython3,FindPython2andFindPythongain capability to control how virtual environments are handled. - The
UseSWIGmodule learned to manage alternate library names by passing-interface <library_name>forpythonlanguage or-dllimport <library_name>forCSharplanguage to theSWIGcompiler.
Generator Expressions¶
- The
generator expressionsC_COMPILER_ID,CXX_COMPILER_ID,CUDA_COMPILER_ID,Fortran_COMPILER_ID,COMPILE_LANGUAGE,COMPILE_LANG_AND_ID, andPLATFORM_IDlearned to support matching one value from a comma-separated list. - The
$<CUDA_COMPILER_ID:...>and$<CUDA_COMPILER_VERSION:...>generator expressionswere added. - The
$<COMPILE_LANG_AND_ID:...>generator expression was introduced to allow specification of compile options for target files based on theCMAKE_<LANG>_COMPILER_IDandLANGUAGEof each source file. - A
$<FILTER:list,INCLUDE|EXCLUDE,regex>generator expressionhas been added. - A
$<REMOVE_DUPLICATES:list>generator expressionhas been added. - The
$<SHELL_PATH:...>generator expressiongained support for a list of paths. - New
$<TARGET_FILE*>generator expressionswere added to retrieve the prefix, base name, and suffix of the file names of various artifacts:$<TARGET_FILE_PREFIX:...>$<TARGET_FILE_BASE_NAME:...>$<TARGET_FILE_SUFFIX:...>$<TARGET_LINKER_FILE_PREFIX:...>$<TARGET_LINKER_FILE_BASE_NAME:...>$<TARGET_LINKER_FILE_SUFFIX:...>$<TARGET_PDB_FILE_BASE_NAME:...>
- The
$<TARGET_OBJECTS:...>generator expressionis now supported onSHARED,STATIC,MODULElibraries and executables.
CTest¶
- The
ctest_submit()command learned a new option:BUILD_ID. This can be used to store the ID assigned to this build by CDash to a variable. - The
ctest_update()command learned to honor a new variable:CTEST_UPDATE_VERSION_OVERRIDE. This can be used to specify the current version of your source tree rather than using the update command to discover the current version that is checked out.
CPack¶
- The
CPack IFW Generatorgained a newCPACK_IFW_PACKAGE_STYLE_SHEETvariable to customize the installer stylesheet.
Deprecated and Removed Features¶
- The
cmake-server(7)mode has been deprecated and will be removed from a future version of CMake. Please port clients to use thecmake-file-api(7)instead. - The
ADDITIONAL_MAKE_CLEAN_FILESdirectory property is now deprecated. Use theADDITIONAL_CLEAN_FILESdirectory property instead. - The variable
CMAKE_AUTOMOC_RELAXED_MODEis considered deprecated. Support still exists but will be removed in future versions. - The
export(PACKAGE)command now does nothing unless enabled viaCMAKE_EXPORT_PACKAGE_REGISTRY. See policyCMP0090. - The
Xcodegenerator now requires at least Xcode 5. - An explicit deprecation diagnostic was added for policy
CMP0066(CMP0065and 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¶
- CMake learned how to compile C++14 with the IBM AIX XL compiler and the SunPro compiler and to compile C++20 with the AppleClang compiler.
- With MSVC-like compilers the value of
CMAKE_<LANG>_FLAGSno longer contains warning flags like/W3by default. See policyCMP0092. - IBM Clang-based XL compilers that define
__ibmxl__now use the compiler idXLClanginstead ofXL. See policyCMP0089. - The
file(REMOVE)andfile(REMOVE_RECURSE)commands were changed to ignore empty arguments with a warning instead of treating them as a relative path and removing the contents of the current directory.
Updates¶
Changes made since CMake 3.15.0 include the following.
3.15.1¶
- In CMake 3.15.0 support for the GNU-like
Clangcompiler targeting the MSVC ABI implementedCMAKE_CXX_STANDARDvalues 98 and 11 using the corresponding-std=flags. However, these modes do not work with the MSVC standard library. Therefore CMake 3.15.1 passes C++14 standard flags even for C++98 and C++11. This is consistent with MSVC itself which always runs in a mode aware of C++14. - Preliminary Swift support added in 3.15.0 has been updated.
3.15.2¶
- In CMake 3.15.0 and 3.15.1 the
CMAKE_FIND_PACKAGE_PREFER_CONFIGvariable caused thefind_package()command to fail on a missing package even without theREQUIREDoption. This has been fixed.