CMake 3.28 Release Notes¶
Changes made since CMake 3.27 include the following.
New Features¶
Languages¶
C++ 20 named modules are now supported by Ninja Generators and Visual Studio Generators for VS 2022 and newer, in combination with the MSVC 14.34 toolset (provided with VS 17.4) and newer, LLVM/Clang 16.0 and newer, and GCC 14 (after the 2023-09-20 daily bump) and newer. See
cmake-cxxmodules(7)
for details.HIP
language code may now be compiled for NVIDIA GPUs using the NVIDIA CUDA Compiler (NVCC). See theCMAKE_HIP_PLATFORM
variable.
Platforms¶
On Apple platforms,
.xcframework
folders are now supported:The
find_library()
command now finds.xcframework
folders.The
target_link_libraries()
command now supports linking against a.xcframework
folder.The
IMPORTED_LOCATION
target property of an imported library target may now be the path to a.xcframework
folder.
Apple visionOS and its
xros
andxrsimulator
SDKs are now supported. Compiling for Apple visionOS can be requested by settingCMAKE_SYSTEM_NAME
tovisionOS
. See Cross Compiling for iOS, tvOS, visionOS, or watchOS for more information.
Presets¶
cmake-presets(7)
files now support schema version8
. It adds support for a$schema
field.
Compilers¶
Cray Clang-based compilers are now supported with
compiler id
CrayClang
.The OrangeC compiler is now supported with
compiler id
OrangeC
.
Commands¶
The
add_custom_command()
andadd_custom_target()
commands gained aJOB_SERVER_AWARE
option.The
cmake_host_system_information()
command gained aMSYSTEM_PREFIX
query for the installation prefix of a MSYS or MinGW development environment on Windows hosts.The
set_property()
commandTEST
mode gained aDIRECTORY
option to set properties on tests in other directories.The
set_tests_properties()
command gained aDIRECTORY
option to set properties on tests in other directories.The
get_property()
commandTEST
mode gained aDIRECTORY
option to get properties on tests in other directories.The
get_test_property()
command gained aDIRECTORY
option to get properties on tests in other directories.
Variables¶
The
CMAKE_CROSSCOMPILING_EMULATOR
environment variable was added to initialize theCMAKE_CROSSCOMPILING_EMULATOR
cache variable.The
CMAKE_HIP_PLATFORM
variable was added to specify the GPU platform for which HIP language sources are to be compiled (amd
ornvidia
).
Properties¶
On imported shared libraries, the
IMPORTED_IMPLIB
target property may now be used withoutIMPORTED_LOCATION
. This can be used to represent a stub library whose location should not be added as a runtime search path to dependents that link it.The
IMPORTED_LOCATION
property of a macOS framework may now be a path to the.framework
folder itself.The
XCODE_EMBED_RESOURCES
target property was added to tell theXcode
generator what targets to put in theEmbed Resources
build phase.
Modules¶
The
ExternalProject
module now includes theBUILD_JOB_SERVER_AWARE
option for theExternalProject_Add()
command. This option enables the integration of the GNU Make job server when using an explicitBUILD_COMMAND
with certain Makefile Generators. Additionally, theExternalProject_Add_Step()
command has been updated to support the newJOB_SERVER_AWARE
option.The
FetchContent
module'sFetchContent_Declare()
command gained anEXCLUDE_FROM_ALL
option, which propagates through to theadd_subdirectory()
call made byFetchContent_MakeAvailable()
for the dependency.The
FindCURL
module gained aCURL_USE_STATIC_LIBS
hint to select static libraries.The
FindEXPAT
module gained anEXPAT_USE_STATIC_LIBS
hint to select static libraries.The
FindPkgConfig
modulepkg_get_variable()
command gained aDEFINE_VARIABLES
option to pass variables topkg-config
.
Generator Expressions¶
The
generator expressions
$<IF:...>
,$<AND:...>
, and$<OR:...>
short-circuit to avoid unnecessary evaluation of parameters.
CTest¶
CTest may now take a dynamically-generated resource spec file, which can be specified by the
GENERATED_RESOURCE_SPEC_FILE
test property.
Deprecated and Removed Features¶
The
exec_program()
command, which has been deprecated since CMake 3.0, has been removed by policyCMP0153
. Use theexecute_process()
command instead.The
Visual Studio 11 2012
generator has been removed.The
Visual Studio 12 2013
generator is now deprecated and will be removed in a future version of CMake.The
IOS_INSTALL_COMBINED
target property and correspondingCMAKE_IOS_INSTALL_COMBINED
variable have been deprecated. Their functionality does not make sense on Apple Silicon hosts.The
Xcode
generator will now issue a fatal error if the Legacy Build System has been selected for Xcode 14 and newer. Those Xcode versions dropped support for the Legacy Build System and expect the project to be set-up for their current Build System.
Other Changes¶
Generated files, in targets using File Sets, are now considered private by default. Generated public headers must be specified using file sets. This allows Ninja Generators to produce more efficient build graphs. See policy
CMP0154
.The
find_library()
,find_path()
, andfind_file()
commands no longer search in installation prefixes derived from thePATH
environment variable. This behavior was added in CMake 3.3 to support MSYS and MinGW (MSYSTEM
) development environments on Windows, but it can search undesired prefixes that happen to be in thePATH
for unrelated reasons. Users who keep some<prefix>/bin
directories in thePATH
just for their tools do not necessarily want any corresponding<prefix>/lib
or<prefix>/include
directories searched. The behavior was reverted for non-Windows platforms by CMake 3.6. Now it has been reverted on Windows platforms too.One may set the
CMAKE_PREFIX_PATH
environment variable with a semicolon-separated list of prefixes that are to be searched.When using MinGW tools in a
MSYSTEM
environment on Windows, the$MSYSTEM_PREFIX/local
and$MSYSTEM_PREFIX
prefixes are now added toCMAKE_SYSTEM_PREFIX_PATH
.The precompiled Linux
x86_64
binaries provided on cmake.org now require GLIBC 2.17 or higher.
Updates¶
Changes made since CMake 3.28.0 include the following.
3.28.1, 3.28.2, 3.28.3¶
These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.
3.28.4¶
Apple visionOS support has been updated for the official Xcode 15.2 release of the
xros
andxrsimulator
SDKs.
3.28.5¶
This version made no changes to documented features or interfaces. Some implementation updates were made to C++ modules support.
3.28.6¶
This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.