CMake 3.8 Release Notes¶
Contents
Changes made since CMake 3.7 include the following.
New Features¶
Languages¶
C#¶
CMake learned to support
CSharp
(C#) as a first-class language that can be enabled via theproject()
andenable_language()
commands. It is currently supported by the Visual Studio Generators for VS 2010 and above.C# assemblies and programs can be added just like common C++ targets using the
add_library()
andadd_executable()
commands. References between C# targets in the same source tree may be specified bytarget_link_libraries()
like for C++. References to system or 3rd-party assemblies may be specified by the target propertiesVS_DOTNET_REFERENCE_<refname>
andVS_DOTNET_REFERENCES
.More fine tuning of C# targets may be done using target and source file properties. Specifically the target properties related to Visual Studio (
VS_*
) are worth a look (for setting toolset versions, root namespaces, assembly icons, ...).
CUDA¶
- CMake learned to support
CUDA
as a first-class language that can be enabled via theproject()
andenable_language()
commands. CUDA
is currently supported by the Makefile Generators and theNinja
generator on Linux, macOS, and Windows. Support for the Visual Studio IDE is under development but not included in this release.- The NVIDIA CUDA Toolkit compiler (
nvcc
) is supported.
C & C++¶
- The
Compile Features
functionality now offers meta-features that request compiler modes for specific language standard levels (e.g.cxx_std_11
). SeeCMAKE_C_KNOWN_FEATURES
andCMAKE_CXX_KNOWN_FEATURES
. - The
Compile Features
functionality is now aware of C++ 17. No specific features are yet enumerated besides thecxx_std_17
meta-feature. - The
Compile Features
functionality is now aware of the availability of C99 in gcc since version 3.4.
Generators¶
- The
CodeBlocks
extra generator may now be used to generate withNMake Makefiles JOM
. - The Visual Studio Generators for VS 2013 and above learned to
support a
host=x64
option in theCMAKE_GENERATOR_TOOLSET
value (e.g. via thecmake(1)
-T
option) to request use of a VS 64-bit toolchain on 64-bit hosts. - The Visual Studio Generators learned to treat files passed to
target_link_libraries()
whose names end in.targets
as MSBuild “targets” files to be imported into generated project files.
Commands¶
- The
add_custom_command()
andadd_custom_target()
commands learned the optionCOMMAND_EXPAND_LISTS
which causes lists in theCOMMAND
argument to be expanded, including lists created by generator expressions. - The
execute_process()
command gained anENCODING
option to specify on Windows which encoding is used for output from child process. - The
math(EXPR)
command gained support for unary+
and-
operators. - The
source_group()
command gainedTREE
andPREFIX
options to add groups following source tree directory structure. - The
string(TIMESTAMP)
command learned to treat%%
as a way to encode plain%
. - The
string(TIMESTAMP)
command will now honor theSOURCE_DATE_EPOCH
environment variable and use its value instead of the current time. - The
try_compile()
command source file signature gained new options to specify the language standard to use in the generated test project. - The
try_compile()
command source file signature now honors language standard variables likeCMAKE_CXX_STANDARD
. See policyCMP0067
.
Variables¶
- A
CMAKE_CODELITE_USE_TARGETS
variable was added to tell theCodeLite
extra generator to change the generated project to have target-centric organization. Thebuild
,rebuild
, andclean
operations withinCodeLite
then work on a selected target rather than the whole workspace. (Note that theNinja
clean operation on a target includes its dependencies, though.) - The
CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS
variable was added to tell theSublime Text 2
extra generator to place specified environment variables in the generated.sublime-project
. - The
CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE
variable was added to tell theSublime Text 2
extra generator whether to exclude the build tree from the.sublime-project
when it is inside the source tree. - A
CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD
variable was added to tell Visual Studio Generators for VS 2010 and above to include thePACKAGE
target in the default build, similar to the existingCMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD
variable for theINSTALL
target.
Properties¶
- A
BUILD_RPATH
target property and correspondingCMAKE_BUILD_RPATH
variable were added to support customRPATH
locations to be added to binaries in the build tree. - The
COMPILE_FLAGS
source file property learned to supportgenerator expressions
. - The
FRAMEWORK
target property may now also be applied to static libraries on Apple targets. It will result in a proper Framework but with a static library inside. - Imported Interface Libraries learned new
IMPORTED_LIBNAME
andIMPORTED_LIBNAME_<CONFIG>
target properties to specify a link library name since interface libraries do not build their own library files. - A
<LANG>_CPPLINT
target property and supportingCMAKE_<LANG>_CPPLINT
variable were introduced to tell the Makefile Generators and theNinja
generator to run thecpplint
style checker along with the compiler forC
andCXX
languages. - A
MANUALLY_ADDED_DEPENDENCIES
target property has been added. It provides a read-only list of dependencies that have been added with theadd_dependencies()
command. - The
MAP_IMPORTED_CONFIG_<CONFIG>
target property learned to interpret empty list elements as referring to the configuration-less imported location specified byIMPORTED_LOCATION
. - The
NO_SYSTEM_FROM_IMPORTED
target property is now supported on Imported Interface Libraries. - New source file properties
SKIP_AUTOMOC
,SKIP_AUTOUIC
,SKIP_AUTORCC
, andSKIP_AUTOGEN
were added to allow source files to be excluded from processing byAUTOMOC
,AUTOUIC
, andAUTORCC
target properties. - A
VS_COPY_TO_OUT_DIR
source file property was added to tell Visual Studio Generators for VS 2010 and above whether or not a file should e copied to the output directory. - A
VS_DEBUGGER_WORKING_DIRECTORY
target property was added to tell Visual Studio Generators for VS 2010 and above what debugger working directory should be set for the target. - A
VS_DOTNET_REFERENCES_COPY_LOCAL
target property was added to specify whether to copy referenced assemblies to the output directory. - A
VS_DOTNET_REFERENCE_<refname>
target property was added to tell Visual Studio Generators for VS 2010 and above to add a .NET reference with a given hint path. - A
VS_INCLUDE_IN_VSIX
source file property was added to tell Visual Studio Generators for VS 2010 and above whether to include the file in a Visual Studio extension package. - A
VS_RESOURCE_GENERATOR
source file property was added to give Visual Studio Generators for VS 2010 and above a setting for the resource generator (C#
only). - A
VS_USER_PROPS
target property was added to tell Visual Studio Generators for VS 2010 and above to use a custom MSBuild user.props
file. - A
XCODE_EMIT_EFFECTIVE_PLATFORM_NAME
global property was added to tell theXcode
generator whether to emit theEFFECTIVE_PLATFORM_NAME
variable. This is useful when building with multiple SDKs likemacosx
andiphoneos
in parallel. - New
XCODE_PRODUCT_TYPE
andXCODE_EXPLICIT_FILE_TYPE
target properties were created to tell theXcode
generator to use custom values of the corresponding attributes for a target in the generated Xcode project.
Modules¶
- A
CSharpUtilities
module was added to aid parameterization of Visual Studio C# targets. It provides functions to allow automated setting of source file properties to support Windows Forms, WPF/XAML or other technologies as needed. - The
ExternalData
module learned to support multiple content links for one data file using different hashes, e.g.img.png.sha256
andimg.png.sha1
. This allows objects to be fetched from sources indexed by different hash algorithms. - The
ExternalProject
module gained theGIT_PROGRESS
option to force Git to show progress when cloning repositories. - The
ExternalProject
module gained aGIT_CONFIG
option to pass--config
options to Git when cloning repositories. - The
FeatureSummary
modulefeature_summary()
command now accepts a newQUIET_ON_EMPTY
option that suppresses the output when the list of packages that belong to the selected category is empty. - The
FeatureSummary
moduleadd_feature_info()
command now accepts lists of dependencies for deciding whether a feature is enabled or not. - The package types accepted by the
FeatureSummary
module can now be tweaked by changing theFeatureSummary_PKG_TYPES
,FeatureSummary_REQUIRED_PKG_TYPES
andFeatureSummary_DEFAULT_PKG_TYPE
global properties. - The
FindOpenGL
module now provides imported targetsOpenGL::GL
andOpenGL::GLU
when the libraries are found. - The
UseSWIG
module gained aswig_add_library
command to give more flexibility over the oldswig_add_module
command. - The
UseSWIG
moduleswig_add_source_to_module
command learned a newSWIG_OUTFILE_DIR
option to control the output file location (swig -o
). - The
WriteCompilerDetectionHeader
module gained theALLOW_UNKNOWN_COMPILERS
andALLOW_UNKNOWN_COMPILER_VERSIONS
options that allow creation of headers that will work also with unknown or old compilers by simply assuming they do not support any of the requested features.
CTest¶
- The
ctest_memcheck()
command gained aDEFECT_COUNT <var>
option to capture the number of memory defects detected. - The
ctest_memcheck()
command learned to read the location of suppressions files for sanitizers from theCTEST_MEMORYCHECK_SUPPRESSIONS_FILE
variable. - The
ctest_memcheck()
command learned to supportLeakSanitizer
independently fromAddressSanitizer
. - The
ctest_update()
commandCDASH_UPLOAD
signature was taught to honor theRETRY_COUNT
,RETRY_DELAY
, andQUIET
options.
CPack¶
- The
CPackIFWConfigureFile
module was added to define a newcpack_ifw_configure_file()
command to configure file templates prepared in QtIFW/SDK/Creator style. - The
CPackIFW
modulecpack_ifw_configure_component()
andcpack_ifw_configure_component_group()
commands gained a newDEFAULT
,VIRTUAL
,FORCED_INSTALLATION
,REQUIRES_ADMIN_RIGHTS
,DISPLAY_NAME
,UPDATE_TEXT
,DESCRIPTION
,RELEASE_DATE
,AUTO_DEPEND_ON
andTRANSLATIONS
options to more specific configuration. - The
CPackIFW
modulecpack_ifw_configure_component()
command gained a newDEPENDENCIES
alias forDEPENDS
option. - The
CPackIFW
modulecpack_ifw_configure_component_group()
command gained a newDEPENDS
option. TheDEPENDENCIES
alias also added. - The
CPackIFW
modulecpack_ifw_configure_component()
andcpack_ifw_configure_component_group()
commandsPRIORITY
option now is deprecated and will be removed in a future version of CMake. Please use newSORTING_PRIORITY
option instead. - The
CPackIFW
module gained newCPACK_IFW_PACKAGE_WATERMARK
,CPACK_IFW_PACKAGE_BANNER
,CPACK_IFW_PACKAGE_BACKGROUND
,CPACK_IFW_PACKAGE_WIZARD_STYLE
,CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH
,CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT
, andCPACK_IFW_PACKAGE_TITLE_COLOR
variables to customize a QtIFW installer look. - The
CPackProductBuild
module gained options to sign packages. See the variablesCPACK_PRODUCTBUILD_IDENTITY_NAME
,CPACK_PRODUCTBUILD_KEYCHAIN_PATH
,CPACK_PKGBUILD_IDENTITY_NAME
, andCPACK_PKGBUILD_KEYCHAIN_PATH
. - The
CPackRPM
module learned to omit tags that are not supported by providedrpmbuild
tool. If unsupported tags are set they are ignored and a developer warning is printed out. - The
CPackRPM
module learned to generate main component package which forces generation of a rpm for defined component without component suffix in filename and package name. SeeCPACK_RPM_MAIN_COMPONENT
variable. - The
CPackRPM
module learned to generate a singledebuginfo
package on demand even if components packaging is used. SeeCPACK_RPM_DEBUGINFO_SINGLE_PACKAGE
variable. - The
CPackRPM
module learned to support multiple directives per file when usingCPACK_RPM_USER_FILELIST
variable.
Deprecated and Removed Features¶
- The
FeatureSummary
module commandsset_package_info()
,set_feature_info()
,print_enabled_features()
, andprint_disabled_features()
are now deprecated. - The
UseSWIG
moduleswig_add_module
command is now deprecated in favor ofswig_add_library
.
Other Changes¶
- If a command specified by the
<LANG>_CLANG_TIDY
target property returns non-zero at build time this is now treated as an error instead of silently ignored. - The
ctest_memcheck()
command no longer automatically addsleak_check=1
to the options used byAddressSanitizer
. The default behavior ofAddressSanitizer
is to run LeakSanitizer to check leaks unlessleak_check=0
. - The
ctest_memcheck()
command was fixed to correctly append extra sanitizer options read from theCTEST_MEMORYCHECK_SANITIZER_OPTIONS
variable to the environment variables used internally by the sanitizers. - The
FeatureSummary
moduleset_package_properties()
command no longer forces the package type toOPTIONAL
when the type is not explicitly set. - The
Compile Features
functionality is now aware of features supported by Intel C++ compilers versions 12.1 through 17.0 on UNIX and Windows platforms. - Calls to the
FindPkgConfig
modulepkg_check_modules()
command following a successful call learned to re-evaluate the cached values for a given prefix after changes to the parameters to the command for that prefix. - When using
AUTOMOC
orAUTOUIC
, generatedmoc_*
,*.moc
andui_*
are placed in the<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include
directory which is automatically added to the target’sINCLUDE_DIRECTORIES
. It is therefore not necessary anymore to haveCMAKE_CURRENT_BINARY_DIR
in the target’sINCLUDE_DIRECTORIES
. - The
Sublime Text 2
generator no longer runs the native build command (e.g.ninja
ormake
) with verbose build output enabled. - The
try_compile()
command source file signature now honors theCMAKE_WARN_DEPRECATED
variable value in the generated test project. - The Visual Studio Generators for VS 2010 and above now place
per-source file flags after target-wide flags when they are classified
as raw flags with no project file setting (
AdditionalOptions
). This behavior is more consistent with the ordering of flags produced by other generators, and allows flags on more-specific properties (per-source) to override those on more general ones (per-target). - The precompiled Windows binary MSI package provided on
cmake.org
now records the installation directory in the Windows Registry under the keyHKLM\Software\Kitware\CMake
with a value namedInstallDir
.