CMake 3.4 Release Notes¶
Changes made since CMake 3.3 include the following.
New Features¶
Generators¶
The
Visual Studio 14 2015
generator learned to select a Windows 10 SDK based on the value of theCMAKE_SYSTEM_VERSION
variable and the SDKs available on the host.CMake learned rudimentary support for the Apple Swift language. When using the
Xcode
generator with Xcode 6.1 or higher, one may enable theSwift
language with theenable_language()
command or theproject()
command (this is an error with other generators or when Xcode is too old). Then one may list.swift
source files in targets for compilation.
Commands¶
The
find_program()
command learned aNAMES_PER_DIR
option to consider all givenNAMES
in each directory before moving on to the next directory.The
get_filename_component()
command learned a newBASE_DIR
subcommand. This is used to specify a base directory when calculating an absolute path from a relative path.The
if()
command learned a newTEST
operator that evaluates to true if a given test name has been defined by theadd_test()
command. See policyCMP0064
.The
install(DIRECTORY)
commandDESTINATION
option learned to supportgenerator expressions
.The
install(FILES)
commandDESTINATION
option learned to supportgenerator expressions
.The
string()
command learned a newAPPEND
subcommand.
Variables¶
The Makefile Generators and the
Ninja
generator learned to add compiler launcher tools like distcc and ccache along with the compiler forC
andCXX
languages. See theCMAKE_<LANG>_COMPILER_LAUNCHER
variable and<LANG>_COMPILER_LAUNCHER
target property for details.New
CMAKE_LINK_SEARCH_START_STATIC
andCMAKE_LINK_SEARCH_END_STATIC
variables were introduced to initialize theLINK_SEARCH_START_STATIC
andLINK_SEARCH_END_STATIC
target properties, respectively.
Properties¶
Visual Studio Generators learned to support additional target properties to customize projects for NVIDIA Nsight Tegra Visual Studio Edition:
The
ARCHIVE_OUTPUT_DIRECTORY
,LIBRARY_OUTPUT_DIRECTORY
, andRUNTIME_OUTPUT_DIRECTORY
target properties learned to supportgenerator expressions
.The
SOURCE_DIR
andBINARY_DIR
target properties were introduced to allow project code to query where a target is defined.The
OUTPUT_NAME
target property and its variants learned to supportgenerator expressions
.A
TARGET_MESSAGES
global property was added to tell the Makefile Generators whether to generate commands to print output after each target is completed.On Windows with MS-compatible tools, CMake learned to optionally generate a module definition (
.def
) file forSHARED
libraries. See theWINDOWS_EXPORT_ALL_SYMBOLS
target property.
Modules¶
The
ExternalProject
moduleExternalProject_Add()
functionGIT_SUBMODULES
option now also limits the set of submodules that are initialized in addition to the prior behavior of limiting the set of submodules that are updated.The
ExternalProject
module learned newUSES_TERMINAL
arguments for giving steps exclusive terminal access. This is useful with theNinja
generator to monitor CMake superbuild progress and prevent CPU oversubscription.The
FindBISON
moduleBISON_TARGET
macro learned a newDEFINES_FILE
option to specify a custom output header to be generated.The
FindHDF5
module learend a newHDF5_PREFER_PARALLEL
option allowing users to specify that a parallel HDF5 tool is preferred if both are available.The
FindIce
module now provides imported targets.The
FindJava
module learned to optionally find theidlj
andjarsigner
tools.The
FindOpenSSL
module now provides imported targets.The
FindOpenSSL
module learned a newOPENSSL_USE_STATIC_LIBS
option to search only for static libraries.The
FindPkgConfig
learned a newpkg_get_variable()
command which may be used to query for arbitrary variables from a package (such as for related tools or data and plugin install paths).The
FindProtobuf
module gained a newprotobuf_generate_python()
function to generate python sources from.proto
files.The
FindTIFF
module learned to search separately for debug and release variants.The
FindwxWidgets
module learned to support version requests.The
FindXercesC
module learned to search separately for debug and release variants.The
FindZLIB
module learned to search separately for debug and release variants.The
GNUInstallDirs
module learned special default values for certain installation prefixes according to the GNU Coding Standards and the Filesystem Hierarchy Standard.The
UseJava
moduleadd_jar
function learned to support response files (e.g.@srcs.txt
) for source specification.The
UseJava
moduleinstall_jar
function learned newDESTINATION
andCOMPONENT
options to specify the correspondinginstall()
command options.The
UseJava
module gained a newcreate_javah
function to create C headers from Java classes.
Generator Expressions¶
A new
$<SHELL_PATH:...>
generator expression
has been added.
CTest¶
CTest learned to optionally measure the CPU load during parallel testing and avoid starting tests that may cause the load to exceed a given threshold. See the
ctest(1)
command--test-load
option, theTestLoad
setting of the CTest Test Step, theCTEST_TEST_LOAD
variable, and theTEST_LOAD
option of thectest_test()
command.ctest(1)
learned options--test-output-size-passed
and--test-output-size-failed
to customize the limit on test output size submitted when running as a Dashboard Client.
CPack¶
The
CPack DEB Generator
learned to set package dependencies per component. See variables:The
CPack
module learned to package empty directories.The
CPack
module gained a new setting,CPACK_VERBATIM_VARIABLES
, which can be used to ensure the cpack program receives the settings' values exactly as they were set, even if they contain CMake-special characters. For compatibility, it's off by default.
Other¶
The
Compile Features
functionality is now aware of features supported by GNU C compilers on Windows.CMake learned to honor
*.manifest
source files with MSVC tools. Manifest files named as sources of.exe
and.dll
targets will be merged with linker-generated manifests and embedded in the binary.The Concurrent Fortran 77 compiler is now supported. Its
compiler id
isCCur
.cmake(1)
gained a new--trace-expand
command line option that is like--trace
but expands variable references in the output.
Deprecated and Removed Features¶
The
CMakeExpandImportedTargets
module is now documented as deprecated. See module documentation for an explanation.The
CMAKE_USE_RELATIVE_PATHS
variable no longer has any effect. Previously it was partially implemented and unreliable.
Other Changes¶
The
CheckFunctionExists
,CheckLibraryExists
,CheckSymbolExists
, andFindThreads
modules learned to work in environments where only CXX is enabled.The
CPack DEB Generator
now correctly excludes symlinks during package checksum calculation.The
CPack DEB Generator
no longer uses fakeroot and system tar program for packaging.The
CPack
module no longer mangles settings with CMake-special characters when they're used as defaults for other settings. The macrocpack_set_if_not_set
, which was responsible for this, is now deprecated.CMake no longer links executables with flags to export symbols unless the
ENABLE_EXPORTS
target property is set. See policyCMP0065
.The
SONAME
field is no longer set forMODULE
libraries created with theadd_library()
command.MODULE
libraries are meant for explicit dynamic loading at runtime. They cannot be linked soSONAME
is not useful.The internal
CMAKE_<LANG>_COMPILE_OBJECT
rule variable now substitutes compiler include flags in a separate<INCLUDES>
placeholder instead of the main<FLAGS>
placeholder.