CMake 3.6 Release Notes¶
Changes made since CMake 3.5 include the following.
New Features¶
Generators¶
The
Ninja
generator learned to produce phony targets of the formsub/dir/all
to drive the build of a subdirectory. This is equivalent tocd sub/dir; make all
with Makefile Generators.The
Ninja
generator now includes system header files in build dependencies to ensure correct re-builds when system packages are updated.The
Visual Studio 14 2015
generator learned to support the Clang/C2 toolsets, e.g. with the-T v140_clang_3_7
option. This feature is experimental.
Commands¶
The
add_custom_command()
andadd_custom_target()
commands learned how to use theCROSSCOMPILING_EMULATOR
executable target property.The
install()
command learned a newEXCLUDE_FROM_ALL
option to leave installation rules out of the default installation.The
list()
command gained aFILTER
sub-command to filter list elements by regular expression.The
string(TIMESTAMP)
andfile(TIMESTAMP)
commands gained support for the%s
placeholder. This is the number of seconds since the UNIX Epoch.
Variables¶
A
CMAKE_DEPENDS_IN_PROJECT_ONLY
variable was introduced to tell Makefile Generators to limit dependency scanning only to files in the project source and build trees.A new
CMAKE_HOST_SOLARIS
variable was introduced to indicate when CMake is running on an Oracle Solaris host.A
CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES
variable was added for use by toolchain files to specify system include directories to be appended to all compiler command lines.The
CMAKE_<LANG>_STANDARD_LIBRARIES
variable is now documented. It is intended for use by toolchain files to specify system libraries to be added to all linker command lines.A
CMAKE_NINJA_OUTPUT_PATH_PREFIX
variable was introduced to tell theNinja
generator to configure the generatedbuild.ninja
file for use as asubninja
.A
CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
variable was added for use by toolchain files to specify platform-specific variables that must be propagated by thetry_compile()
command into test projects.A
CMAKE_TRY_COMPILE_TARGET_TYPE
variable was added to optionally tell thetry_compile()
command to build a static library instead of an executable. This is useful for cross-compiling toolchains that cannot link binaries without custom flags or scripts.
Properties¶
A
DEPLOYMENT_REMOTE_DIRECTORY
target property was introduced to tell theVisual Studio 9 2008
andVisual Studio 8 2005
generators to generate the "remote directory" for WinCE project deployment and debugger settings.A
<LANG>_CLANG_TIDY
target property and supportingCMAKE_<LANG>_CLANG_TIDY
variable were introduced to tell the Makefile Generators and theNinja
generator to runclang-tidy
along with the compiler forC
andCXX
languages.A
TIMEOUT_AFTER_MATCH
test property was introduced to optionally tell CTest to enforce a secondary timeout after matching certain output from a test.A
VS_CONFIGURATION_TYPE
target property was introduced to specify a custom project file type for Visual Studio Generators supporting VS 2010 and above.A
VS_STARTUP_PROJECT
directory property was introduced to specify for Visual Studio Generators the default startup project for generated solutions (.sln
files).
Modules¶
The
CMakePushCheckState
module now pushes/pops/resets the variableCMAKE_EXTRA_INCLUDE_FILES
used inCheckTypeSize
.The
ExternalProject
module leared theGIT_SHALLOW 1
option to perform a shallow clone of a Git repository.The
ExternalProject
module learned to initialize Git submodules recursively and also to initialize new submodules on updates. Use theGIT_SUBMODULES
option to restrict which submodules are initialized and updated.The
ExternalProject
module leared theDOWNLOAD_NO_EXTRACT 1
argument to skip extracting the file that is downloaded (e.g., for self-extracting shell installers or.msi
files).The
ExternalProject
module now usesTLS_VERIFY
when fetching from git repositories.The
FindBLAS
andFindLAPACK
modules learned to support OpenBLAS.The
FindCUDA
module learned to find thecublas_device
library.The
FindGTest
modulegtest_add_tests
function now causes CMake to automatically re-run when test sources change so that they can be re-scanned.The
FindLTTngUST
module was introduced to find the LTTng-UST library.The
FindPkgConfig
module learned to optionally create imported targets for the libraries it has found.The
FindProtobuf
module learned to provide aProtobuf_VERSION
variable and check the version number requested in afind_package()
call.The
InstallRequiredSystemLibraries
module learned a newCMAKE_INSTALL_UCRT_LIBRARIES
option to enable app-local deployment of the Windows Universal CRT libraries with Visual Studio 2015.
Platforms¶
The Clang compiler is now supported on CYGWIN.
Support was added for the Bruce C Compiler with compiler id
Bruce
.
CTest¶
The
ctest_update()
command now looks at theCTEST_GIT_INIT_SUBMODULES
variable to determine whether submodules should be updated or not before updating.The
ctest_update()
command will now synchronize submodules on an update. Updates which add submodules or change a submodule's URL will now be pulled properly.
CPack¶
The
CPack DEB Generator
learned how to handle$ORIGIN
inCMAKE_INSTALL_RPATH
whenCPACK_DEBIAN_PACKAGE_SHLIBDEPS
is used for dependency auto detection.The
CPack DEB Generator
learned how to generateDEBIAN/shlibs
control file when package contains shared libraries.The
CPack DEB Generator
learned how to generateDEBIAN/postinst
andDEBIAN/postrm
files if the package installs libraries in ldconfig-controlled locations (e.g./lib/
,/usr/lib/
).The
CPack DEB Generator
learned how to generate dependencies between Debian packages if multi-component setup is used andCPACK_COMPONENT_<compName>_DEPENDS
variables are set. For backward compatibility this feature is disabled by default. SeeCPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS
.The
CPack DEB Generator
learned how to set custom package file names including how to generate properly-named Debian packages:<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
For backward compatibility this feature is disabled by default. See
CPACK_DEBIAN_FILE_NAME
andCPACK_DEBIAN_<COMPONENT>_FILE_NAME
.The
CPack DEB Generator
learned how to set the package release number (DebianRevisionNumber
in package file name when used in combination withDEB-DEFAULT
value set byCPACK_DEBIAN_FILE_NAME
). SeeCPACK_DEBIAN_PACKAGE_RELEASE
.The
CPack DEB Generator
learned how to set the package architecture per-component. SeeCPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
.The
CPack DragNDrop Generator
learned a new option to skip the/Applications
symlink. See theCPACK_DMG_DISABLE_APPLICATIONS_SYMLINK
variable.The
CPackIFW
module gained a newcpack_ifw_update_repository()
command to update a QtIFW-specific repository from a remote repository.The
CPack RPM Generator
learned how to set RPMdist
tag as part of RPMRelease:
tag when enabled (mandatory on some Linux distributions for e.g. on Fedora). SeeCPACK_RPM_PACKAGE_RELEASE_DIST
.The
CPack RPM Generator
learned how to set default values for owning user/group and file/directory permissions of package content. SeeCPACK_RPM_DEFAULT_USER
,CPACK_RPM_DEFAULT_GROUP
,CPACK_RPM_DEFAULT_FILE_PERMISSIONS
,CPACK_RPM_DEFAULT_DIR_PERMISSIONS
and their per component counterparts.The
CPack RPM Generator
learned how to set user defined package file names, how to specify that rpmbuild should decide on file name format as well as handling of multiple rpm packages generated by a single user defined spec file. SeeCPACK_RPM_PACKAGE_NAME
andCPACK_RPM_<component>_PACKAGE_NAME
.The
CPack RPM Generator
learned how to correctly handle symlinks that are pointing outside generated packages.
Other¶
The
Compile Features
functionality is now aware of features supported by Intel C++ compilers versions 12.1 through 16.0 on UNIX platforms.
Deprecated and Removed Features¶
The
CMakeForceCompiler
module and its macros are now deprecated. See module documentation for an explanation.The
find_library()
,find_path()
, andfind_file()
commands no longer search in installation prefixes derived from thePATH
environment variable on non-Windows platforms. This behavior was added in CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts. Users that keep some<prefix>/bin
directories in thePATH
just for their tools do not necessarily want any supporting<prefix>/lib
directories searched. One may set theCMAKE_PREFIX_PATH
environment variable with a semicolon-separated list of prefixes that are to be searched.The
Visual Studio 7 .NET 2003
generator is now deprecated and will be removed in a future version of CMake.The
Visual Studio 7
generator (for VS .NET 2002) has been removed. It had been deprecated since CMake 3.3.The
Visual Studio 6
generator has been removed. It had been deprecated since CMake 3.3.
Other Changes¶
The precompiled OS X binary provided on
cmake.org
now requires OS X 10.7 or newer.On Linux and FreeBSD platforms, when building CMake itself from source and not using a system-provided libcurl, OpenSSL is now used by default if it is found on the system. This enables SSL/TLS support for commands supporting network communication via
https
, such asfile(DOWNLOAD)
,file(UPLOAD)
, andctest_submit()
.The
cmake(1)
--build
command-line tool now rejects multiple--target
options with an error instead of silently ignoring all but the last one.AUTOMOC
now diagnoses name collisions when multiple source files in different directories use#include <moc_foo.cpp>
with the same name (because the generatedmoc_foo.cpp
files would collide).The
FindBISON
moduleBISON_TARGET
macro now supports special characters by passing theVERBATIM
option to internaladd_custom_command()
calls. This may break clients that added escaping manually to work around the bug.The
FindFLEX
moduleFLEX_TARGET
macro now supports special characters by passing theVERBATIM
option to internaladd_custom_command()
calls. This may break clients that added escaping manually to work around the bug.The
FindProtobuf
module input and output variables were all renamed fromPROTOBUF_
toProtobuf_
for consistency with other find modules. Input variables of the old case will be honored if provided, and output variables of the old case are always provided.The
CPack RPM Generator
now supports upper cased component names in per component CPackRPM specific variables. E.g. component namedfoo
now expects component specific variable to beCPACK_RPM_FOO_PACKAGE_NAME
while before it expectedCPACK_RPM_foo_PACKAGE_NAME
. Upper cased component name part in variables is compatible with convention used for other CPack variables. For back compatibility old format of variables is still valid and preferred if both versions of variable are set, but the preferred future use is upper cased component names in variables. New variables that will be added to CPackRPM in later versions will only support upper cased component variable format.The CPack NSIS generator's configuration file template was fixed to quote the path to the uninstaller tool used by the
CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL
option. This avoids depending on an insecure Windows feature to run an uninstaller tool with a space in the path.