CMake 3.4 Release Notes¶
Contents
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:
ANDROID_ANT_ADDITIONAL_OPTIONS
ANDROID_ARCH
ANDROID_ASSETS_DIRECTORIES
ANDROID_JAR_DEPENDENCIES
ANDROID_JAR_DIRECTORIES
ANDROID_JAVA_SOURCE_DIR
ANDROID_NATIVE_LIB_DEPENDENCIES
ANDROID_NATIVE_LIB_DIRECTORIES
ANDROID_PROCESS_MAX
ANDROID_PROGUARD
ANDROID_PROGUARD_CONFIG_PATH
ANDROID_SECURE_PROPS_PATH
ANDROID_SKIP_ANT_STEP
ANDROID_STL_TYPE
- 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:CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS
CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES
CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS
- 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.