# CMake 3.21.0-rc2 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-21-0-rc2-is-ready-for-testing/3663
**Category:** Announcements
**Created:** [June 30, 2021, 3:28pm UTC](https://discourse.cmake.org/t/cmake-3-21-0-rc2-is-ready-for-testing/3663 "2021-06-30T15:28:12Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![Tom\_Osika](https://discourse.cmake.org/user_avatar/discourse.cmake.org/tom_osika/32/1101_2.png) [@Tom\_Osika](https://discourse.cmake.org/u/Tom_Osika)
#### Post date: [June 30, 2021, 3:28pm UTC](https://discourse.cmake.org/t/cmake-3-21-0-rc2-is-ready-for-testing/3663/1 "2021-06-30T15:28:12Z")

</div>

I am proud to announce the second CMake 3.21 release candidate.  
[https://cmake.org/download/](https://cmake.org/download/)

Documentation is available at:  
[https://cmake.org/cmake/help/v3.21](https://cmake.org/cmake/help/v3.21)

Release notes appear below and are also published at  
[https://cmake.org/cmake/help/v3.21/release/3.21.html](https://cmake.org/cmake/help/v3.21/release/3.21.html)

Some of the more significant changes in CMake 3.21 are:

- CMake learned to support “HIP” as a first-class language that can be  
enabled via the “project()” and “enable\_language()” commands.

- 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.

- 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.

- “C\_STANDARD”, “OBJC\_STANDARD”, and the “Compile Features”  
functionality gained support for C17 and C23.

- “cmake(1)” gained the “–toolchain \<path/to/file\>” command-line  
option to specify a toolchain file.

- Messages printed to a terminal now may be colored by message type.

- The Fujitsu compiler is now supported using compiler id “Fujitsu” in  
traditional (“Trad”) mode, and compiler id “FujitsuClang” in “Clang”  
mode.

- The “add\_custom\_command()” command “DEPFILE” option:

- The “add\_custom\_command(TARGET)” command (for Build Events) gained  
support for resolving target-dependent generator expressions.

- 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)”.

- A new “TARGET\_RUNTIME\_DLLS” generator expression was added.

- “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.

- “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”.

- The “foreach()” command now isolates loop variables in the loop  
scope. See policy “CMP0124” for details.

# 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:

- 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](https://cmake.org/download/) now support “liblzma”  
multi-threading. See the “CPACK\_THREADS” and  
“CPACK\_ARCHIVE\_THREADS” variables.

* * *

Changes made since CMake 3.21.0-rc1:

Alex Sweet (1):

- CPack/RPM: Fix weak dep support

Ben Boeckel (1):

- Help/CMP0102: mention the varible that controls CMP0102 warnings

Brad King (16):

- bootstrap: Compile with \_FILE\_OFFSET\_BITS=64 on Linux
- Help: Remove unnecessary Sphinx versionadded markup in VS toolset selection
- VS: Update v142 CL flag table for VS 17.0 Preview 1
- Tests: Shorten RunCMake.GenEx-\* case names
- VS: Add Visual Studio 17 2022 generator
- VS: Use 64-bit MSBuild in VS 2022
- TestDriver: Avoid declaring local variable after statement
- Help: Clarify 3.21 release note on supportedPlatforms
- Help/dev/experimental: Link to published P1689R4
- ci: update keyserver URL
- ci: add freeglut to Debian and Fedora base images
- curl: backport upstream fix to 7.77.0 regression
- VS: Add ARM64EC to supported platforms for VS 16 and 17
- DetermineCompiler: Restore identification of MSVC with no INCLUDE dirs
- target\_link\_libraries: Restore transitive out-of-dir linking
- CMake 3.21.0-rc2

Eisuke Kawashima (1):

- FindOpenMP: Link with OpenMP flags on Fujitsu

FeRD (Frank Dana) (1):

- Help: Add versionadded tags to cmake-generator-expressions(7)

Gregor Jasny (1):

- ASM\_NASM: Do not generate depfiles with YASM

KWSys Upstream (1):

- KWSys 2021-06-28 (0648cb1a)

Marc Chevrier (2):

- Help: UseJava reorganization
- CMP0126: Add control for warnings

NAKAMURA Takumi (1):

- Tests/RunCMake/Ninja.\*: Sanitize NINJA\_STATUS since we expect default behavior

Paul Zehner (1):

- Fujitsu: Add IPO support for Fortran

Yuichiro Utsumi (2):

- FujitsuClang: Set CMAKE\_\<LANG\>\_COMPILER\_AR and CMAKE\_\<LANG\>\_COMPILER\_RANLIB
- FujitsuClang: Change LTO option from -flto=thin to -flto

Đoàn Trần Công Danh (1):

- Ninja: Fix LINK\_WHAT\_YOU\_USE link flag placement
