CMake 3.21 Release Notes
************************
Changes made since CMake 3.20 include the following.
New Features
============
Presets
——-
* “cmake-presets(7)” gained support for specifying the install prefix
in a configure preset.
* “cmake-presets(7)” gained support for conditional enabling of
presets.
* “cmake-presets(7)” gained support for a “${hostSystemName}” macro.
* “cmake-presets(7)” gained support for omitting the “generator” and
“binaryDir” fields.
Generators
———-
* The Makefile Generators and the “Ninja” generator learned to add
linker launcher tools along with the linker for “C”, “CXX”, “OBJC”,
and “OBJCXX” languages. See the “CMAKE_<LANG>_LINKER_LAUNCHER”
variable and “<LANG>_LINKER_LAUNCHER” target property for details.
* The “Visual Studio 17 2022” generator was added. This is
experimental and based on “Visual Studio 2022 Preview 1.1” because
this version of VS has not been released.
Languages
———
* CMake learned to support “HIP” as a first-class language that can be
enabled via the “project()” and “enable_language()” commands.
* “C_STANDARD”, “OBJC_STANDARD”, and the “Compile Features”
functionality gained support for C17 and C23.
* Source file extensions “.ixx” and “.cppm” are now treated as C++.
Command-Line
————
* “cmake(1)” gained the “–install-prefix <dir>” command-line option
to specify the location of the install prefix.
* “cmake(1)” gained the “–toolchain <path/to/file>” command-line
option to specify a toolchain file.
* “cmake(1)” “-E capabilities” output, for some generators, may now
contain a “supportedPlatforms” field listing platforms known to be
supported in “CMAKE_GENERATOR_PLATFORM”.
* Messages printed to a terminal now may be colored by message type.
Compilers
———
* The Fujitsu compiler is now supported using compiler id “Fujitsu” in
traditional (“Trad”) mode, and compiler id “FujitsuClang” in “Clang”
mode.
Platforms
———
* CMake now supports the MSYS runtime environment, much like CYGWIN.
File-Based API
————–
* The “cmake-file-api(7)” “codemodel” version 2 “version” field has
been updated to 2.3.
* The “cmake-file-api(7)” “codemodel” version 2 gained a new
“directory” object containing directory-level information. This
includes a list of installers generated by the “install()” command.
Commands
——–
* The “add_custom_command()” command “DEPFILE” option may now use
“generator expressions”, is now supported by Visual Studio Generators
for VS 2012 and above, and is now supported by the “Xcode” generator.
* The “add_custom_command(TARGET)” command (for Build Events) gained
support for resolving target-dependent generator expressions.
* The “build_command()” command gained a “PARALLEL_LEVEL” option.
* The “file(COPY_FILE)” command was added to copy a single file.
* The “file(GET_RUNTIME_DEPENDENCIES)” command gained new
“POST_INCLUDE_FILES” and “POST_EXCLUDE_FILES” arguments.
* The “file(REAL_PATH)” command gained the option “EXPAND_TILDE” to
replace any leading tilde with the path to the user’s home
directory.
* The “file(RENAME)” command learned to optionally capture failure in
a result variable. It also gained a “NO_REPLACE” option to fail if
the destination exists.
* The “install()” command gained a new “IMPORTED_RUNTIME_ARTIFACTS”
mode, which can be used to install the runtime artifacts of imported
targets.
* The “install()” command gained a new “RUNTIME_DEPENDENCY_SET” mode,
which can be used to install runtime dependencies using
“file(GET_RUNTIME_DEPENDENCIES)”.
* The “install(TARGETS)” command gained new “RUNTIME_DEPENDENCIES” and
“RUNTIME_DEPENDENCY_SET” arguments, which can be used to install
runtime dependencies using “file(GET_RUNTIME_DEPENDENCIES)”.
* The “install(SCRIPT|CODE)” command supports a new option
“ALL_COMPONENTS” which allows the corresponding code to run for
every component of a per component installation.
* The “project()” command now sets variables “PROJECT_IS_TOP_LEVEL”
and “<PROJECT-NAME>_IS_TOP_LEVEL” to indicate whether it was called
in a top-level “CMakeLists.txt” file.
Variables
———
* The “CMAKE_TOOLCHAIN_FILE” environment variable was added to provide
a default value for the “CMAKE_TOOLCHAIN_FILE” variable.
Properties
———-
* The “IMPORTED_TARGETS” directory property was added to get a list of
Imported Targets created in the current directory.
* The “XCODE_EMBED_APP_EXTENSIONS” target property was added to tell
the “Xcode” generator to embed app extensions such as iMessage
sticker packs. Aspects of the embedding can be customized with the
“XCODE_EMBED_APP_EXTENSIONS_PATH”,
“XCODE_EMBED_APP_EXTENSIONS_CODE_SIGN_ON_COPY” and
“XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY” properties.
Modules
——-
* The “FindBLAS” and “FindLAPACK” modules learned to support the
serial “Fujitsu_SSL2” and parallel “Fujitsu_SSL2BLAMP” libraries.
* The “FindDevIL” module now provides imported targets.
* The “FindIconv” module now has version support.
* The “FindIntl” module now has version support.
* The “FindMPI” module learned to support “Fujitsu” and “FujitsuClang”
in both host and cross compiling modes.
* The “FindMsys” module was added to find MSYS installations. Like
“FindCygwin”, it is used automatically by some other find modules to
locate UNIX-style tools on Windows.
* The “FindOpenMP” module learned to support “Fujitsu” and
“FujitsuClang”.
* The “FindVulkan” module gained imported targets “Vulkan::Headers”
and “Vulkan::glslangValidator”.
* The “UseJava” module command “add_jar” gained a “RESOURCES” option
to allow explicit naming of resources with non-optional namespace.
* The “UseSWIG” module use now standard library naming conventions for
the “CSharp” language. See policy “CMP0122”.
* The “UseSWIG” module now supports using the “swig” tool to generate
implicit dependencies with the “Xcode” generator.
Generator Expressions
———————
* A new “TARGET_RUNTIME_DLLS” generator expression was added.
CTest
—–
* “ctest(1)” gained documentation for its ability to capture
Additional Test Measurements.
* “ctest(1)” learned to recognize files attached to a test at run
time. Previously it was only possible to attach files to tests at
configure time by using the “ATTACHED_FILES” or
“ATTACHED_FILES_ON_FAIL” test properties. See Additional Test
Measurements for more information.
* “ctest(1)” gained a “–output-junit” option to write test results to
a JUnit XML file.
* The “ctest_build()” command gained a “PARALLEL_LEVEL” option.
CPack
—–
* The “CPack DragNDrop Generator” gained option “CPACK_DMG_FILESYSTEM”
to control the “.dmg” filesystem.
* The “CPack IFW Generator” now supports hyphens in names given to
“cpack_ifw_configure_component()” or
“cpack_ifw_configure_component_group()” as “DEPENDS” or
“DEPENDENCIES” arguments. This requires QtIFW 3.1 or later.
* The “CPack NSIS Generator” gained a new “CPACK_NSIS_EXECUTABLE”
variable to specify the “makensis” executable to use instead of the
default one.
* The “CPACK_CUSTOM_INSTALL_VARIABLES” variable was added to set
variables in “cmake_install.cmake” script invocations made by CPack.
Deprecated and Removed Features
===============================
* Undocumented “CMAKE_SYSTEM_NAME” version-stripping behavior has been
removed entirely. If it is set by a “-D” flag or by a “toolchain
file”, it is left unaltered, even if it still contains a version
number. Similar “CMAKE_HOST_SYSTEM_NAME” version-stripping behavior,
also undocumented, has been moved earlier, before “project()” or
“enable_language()” is called.
* “ARMClang” cpu/arch compile and link flags are no longer added
automatically based on the “CMAKE_SYSTEM_PROCESSOR” variable or the
undocumented “CMAKE_SYSTEM_ARCH” variable. They must be specified
explicitly. See policy “CMP0123”.
Other Changes
=============
* The “find_file()”, “find_path()”, “find_program()”, and
“find_library()” commands handle cache variables in the same way
regardless how they are defined. See policy “CMP0125” for details.
* The “find_file()”, “find_path()”, “find_program()”, and
“find_library()” commands gained the option “NO_CACHE” to store find
result in normal variable.
* The “foreach()” command now isolates loop variables in the loop
scope. See policy “CMP0124” for details.
* The “list()” command’s “GET”, “INSERT”, “SUBLIST”, and “REMOVE_AT”
subcommands now error with invalid (i.e., non-integer) values are
given as any of their index arguments based on the setting of policy
“CMP0121”.
* The “set(CACHE)” command no longer removes a normal variable of the
same name, if any. See policy “CMP0126”.
* “target_link_libraries()” calls referencing object libraries via the
“TARGET_OBJECTS” generator expression now place the object files
before all libraries on the link line, regardless of their specified
order. See documentation on Linking Object Libraries via
$<TARGET_OBJECTS> for details.
* The Ninja Generators now pass source files and include directories
to the compiler using absolute paths. This makes diagnostic
messages and debug symbols more consistent, and matches the Makefile
Generators.
* The “NMake Makefiles” generator now encodes the generated makefiles
as UTF-8 with a BOM when using “nmake” from VS 9 or above.
* The Visual Studio Generators for VS 2010 and above now place per-
source preprocessor definitions after target-wide preprocssor
definitions. This makes VS consistent with the Ninja Generators and
the Makefile Generators.
* The precompiled binaries provided on cmake.org now support “liblzma”
multi-threading. See the “CPACK_THREADS” and
“CPACK_ARCHIVE_THREADS” variables.
—————————————————————————-
Changes made since CMake 3.21.0-rc3:
Alex Turbov (1):
CPack/DEB: Avoid overriding user-provided `postinst` and `postrm`
Brad King (6):
FindJPEG: Revert “Search for ‘turbojpeg’ and ‘turbojpeg-static’ too”
Tests: Fix RunCMake.try_compile C/CXX standards with IntelLLVM MSVC mode
Find{BLAS,LAPACK}: Avoid clobbering results when no vendor is requested
ci: Verify that Intel MKL is found when it is the only BLAS/LAPACK
Help: Clarify ‘cmake –build’ signature alternatives
CMake 3.21.0
Kyle Edwards (1):
file(GET_RUNTIME_DEPENDENCIES): Check architecture of dependencies
Lingkai Dong (1):
ARMClang: Fix regression in check for working compiler
Raul Tambre (1):
CMakeCCompilerId: Fix C standard detection in Clang and IntelLLVM MSVC mode
Sérgio Martins (1):
Help: Fix preset example cmakeMinimumRequired