CMake 3.8.0-rc3 is now ready!
March 24, 2017
I am proud to announce the third CMake 3.8 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v3.8
Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.8/release/3.8.html
Some of the more significant changes in CMake 3.8 are:
- CMake now supports “CSharp” (C#) as a first-class language. It is
currently supported by the Visual Studio Generators for VS 2010
and above. - CMake now supports “CUDA” as a first-class language. It is
currently supported by the Makefile Generators and the
“Ninja” generator on Linux, macOS, and Windows. Support for the
Visual Studio IDE is under development but not included in this
release. - The “Compile Features” functionality now offers meta-features that
request compiler modes for specific language standard levels (e.g.
“cxx_std_11”). See “CMAKE_C_KNOWN_FEATURES” and
“CMAKE_CXX_KNOWN_FEATURES”. - The “Compile Features” functionality is now aware of C++ 17. No
specific features are yet enumerated besides the “cxx_std_17” meta-
feature. - The Visual Studio Generators for VS 2013 and above learned to
support a “host=x64” option in the “CMAKE_GENERATOR_TOOLSET” value
(e.g. via the “cmake(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. - 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 like “CMAKE_CXX_STANDARD”. See policy
“CMP0067”. - A “BUILD_RPATH” target property and corresponding
“CMAKE_BUILD_RPATH” variable were added to support custom “RPATH”
locations to be added to binaries in the build tree. - The “COMPILE_FLAGS” source file property learned to support
“generator expressions”. - A new generator expression “$<IF:cond,true-value,false-value>” was
added. It resolves to the true-value if the condition is “1” and
resolves to the false-value if the condition is “0”. - 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. - 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 key “HKLM\Software\Kitware\CMake” with a value named
“InstallDir”.
CMake 3.8 Release Notes
***********************
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 the "project()" and "enable_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()" and "add_executable()" commands.
References between C# targets in the same source tree may be
specified by "target_link_libraries()" like for C++. References to
system or 3rd-party assemblies may be specified by the target
properties "VS_DOTNET_REFERENCE_<refname>" and
"VS_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 the "project()" and "enable_language()" commands.
* "CUDA" is currently supported by the Makefile Generators and the
"Ninja" 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"). See "CMAKE_C_KNOWN_FEATURES" and
"CMAKE_CXX_KNOWN_FEATURES".
* The "Compile Features" functionality is now aware of C++ 17. No
specific features are yet enumerated besides the "cxx_std_17" meta-
feature.
* The "Compile Features" functionality is now aware of the
availability of C99 in gcc since version 3.4.
Platforms
---------
* A new minimal platform file for "Fuchsia" was added.
Generators
----------
* The "CodeBlocks" extra generator may now be used to generate with
"NMake Makefiles JOM".
* The Visual Studio Generators for VS 2013 and above learned to
support a "host=x64" option in the "CMAKE_GENERATOR_TOOLSET" value
(e.g. via the "cmake(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()" and "add_custom_target()" commands
learned the option "COMMAND_EXPAND_LISTS" which causes lists in the
"COMMAND" argument to be expanded, including lists created by
generator expressions.
* The "execute_process()" command gained an "ENCODING" 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 gained "TREE" and "PREFIX" 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 the
"SOURCE_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 like "CMAKE_CXX_STANDARD". See policy
"CMP0067".
Variables
---------
* A "CMAKE_CODELITE_USE_TARGETS" variable was added to tell the
"CodeLite" extra generator to change the generated project to have
target-centric organization. The "build", "rebuild", and "clean"
operations within "CodeLite" then work on a selected target rather
than the whole workspace. (Note that the "Ninja" clean operation on
a target includes its dependencies, though.)
* The "CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS" variable was added to tell
the "Sublime 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 the "Sublime 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
the "PACKAGE" target in the default build, similar to the existing
"CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD" variable for the
"INSTALL" target.
Properties
----------
* A "BUILD_RPATH" target property and corresponding
"CMAKE_BUILD_RPATH" variable were added to support custom "RPATH"
locations to be added to binaries in the build tree.
* The "COMPILE_FLAGS" source file property learned to support
"generator 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" and
"IMPORTED_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 supporting
"CMAKE_<LANG>_CPPLINT" variable were introduced to tell the Makefile
Generators and the "Ninja" generator to run the "cpplint" style
checker along with the compiler for "C" and "CXX" languages.
* A "MANUALLY_ADDED_DEPENDENCIES" target property has been added. It
provides a read-only list of dependencies that have been added with
the "add_dependencies()" command.
* The "MAP_IMPORTED_CONFIG_<CONFIG>" target property learned to
interpret empty list elements as referring to the configuration-less
imported location specified by "IMPORTED_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", and "SKIP_AUTOGEN" were added to allow source files
to be excluded from processing by "AUTOMOC", "AUTOUIC", and
"AUTORCC" 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 the "Xcode" generator whether to emit the
"EFFECTIVE_PLATFORM_NAME" variable. This is useful when building
with multiple SDKs like "macosx" and "iphoneos" in parallel.
* New "XCODE_PRODUCT_TYPE" and "XCODE_EXPLICIT_FILE_TYPE" target
properties were created to tell the "Xcode" 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" and "img.png.sha1". This allows objects to be
fetched from sources indexed by different hash algorithms.
* The "ExternalProject" module gained the "GIT_PROGRESS" option to
force Git to show progress when cloning repositories.
* The "ExternalProject" module gained a "GIT_CONFIG" option to pass
" --config" options to Git when cloning repositories.
* The "FeatureSummary" module "feature_summary()" command now
accepts a new "QUIET_ON_EMPTY" option that suppresses the output
when the list of packages that belong to the selected category is
empty.
* The "FeatureSummary" module "add_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 the "FeatureSummary_PKG_TYPES",
"FeatureSummary_REQUIRED_PKG_TYPES" and
"FeatureSummary_DEFAULT_PKG_TYPE" global properties.
* The "FindOpenGL" module now provides imported targets "OpenGL::GL"
and "OpenGL::GLU" when the libraries are found.
* The "UseSWIG" module gained a "swig_add_library" command to give
more flexibility over the old "swig_add_module" command.
* The "UseSWIG" module "swig_add_source_to_module" command learned a
new "SWIG_OUTFILE_DIR" option to control the output file location
("swig -o").
* The "WriteCompilerDetectionHeader" module gained the
"ALLOW_UNKNOWN_COMPILERS" and "ALLOW_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 a "DEFECT_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 the
"CTEST_MEMORYCHECK_SUPPRESSIONS_FILE" variable.
* The "ctest_memcheck()" command learned to support "LeakSanitizer"
independently from "AddressSanitizer".
* The "ctest_update()" command "CDASH_UPLOAD" signature was taught
to honor the "RETRY_COUNT", "RETRY_DELAY", and "QUIET" options.
CPack
-----
* The "CPackIFWConfigureFile" module was added to define a new
"cpack_ifw_configure_file()" command to configure file templates
prepared in QtIFW/SDK/Creator style.
* The "CPackIFW" module "cpack_ifw_configure_component()" and
"cpack_ifw_configure_component_group()" commands gained a new
"DEFAULT", "VIRTUAL", "FORCED_INSTALLATION",
"REQUIRES_ADMIN_RIGHTS", "DISPLAY_NAME", "UPDATE_TEXT",
"DESCRIPTION", "RELEASE_DATE", "AUTO_DEPEND_ON" and "TRANSLATIONS"
options to more specific configuration.
* The "CPackIFW" module "cpack_ifw_configure_component()" command
gained a new "DEPENDENCIES" alias for "DEPENDS" option.
* The "CPackIFW" module "cpack_ifw_configure_component_group()"
command gained a new "DEPENDS" option. The "DEPENDENCIES" alias also
added.
* The "CPackIFW" module "cpack_ifw_configure_component()" and
"cpack_ifw_configure_component_group()" commands "PRIORITY" option
now is deprecated and will be removed in a future version of CMake.
Please use new "SORTING_PRIORITY" option instead.
* The "CPackIFW" module gained new "CPACK_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", and
"CPACK_IFW_PACKAGE_TITLE_COLOR" variables to customize a QtIFW
installer look.
* The "CPackProductBuild" module gained options to sign packages.
See the variables "CPACK_PRODUCTBUILD_IDENTITY_NAME",
"CPACK_PRODUCTBUILD_KEYCHAIN_PATH", "CPACK_PKGBUILD_IDENTITY_NAME",
and "CPACK_PKGBUILD_KEYCHAIN_PATH".
* The "CPackRPM" module learned to omit tags that are not supported
by provided "rpmbuild" 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. See
"CPACK_RPM_MAIN_COMPONENT" variable.
* The "CPackRPM" module learned to generate a single "debuginfo"
package on demand even if components packaging is used. See
"CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE" variable.
* The "CPackRPM" module learned to support multiple directives per
file when using "CPACK_RPM_USER_FILELIST" variable.
Other
-----
* CMake functionality using cryptographic hashes now supports SHA-3
algorithms.
* A new generator expression "$<IF:cond,true-value,false-value>" was
added. It resolves to the true-value if the condition is "1" and
resolves to the false-value if the condition is "0".
Deprecated and Removed Features
===============================
* The "FeatureSummary" module commands "set_package_info()",
"set_feature_info()", "print_enabled_features()", and
"print_disabled_features()" are now deprecated.
* The "UseSWIG" module "swig_add_module" command is now deprecated
in favor of "swig_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 adds
"leak_check=1" to the options used by "AddressSanitizer". The
default behavior of "AddressSanitizer" is to run *LeakSanitizer* to
check leaks unless "leak_check=0".
* The "ctest_memcheck()" command was fixed to correctly append extra
sanitizer options read from the
"CTEST_MEMORYCHECK_SANITIZER_OPTIONS" variable to the environment
variables used internally by the sanitizers.
* The "FeatureSummary" module "set_package_properties()" command no
longer forces the package type to "OPTIONAL" 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" module "pkg_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" or "AUTOUIC", generated "moc_*", "*.moc" and
"ui_*" are placed in the
"<CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include" directory
which is automatically added to the target's "INCLUDE_DIRECTORIES".
It is therefore not necessary anymore to have
"CMAKE_CURRENT_BINARY_DIR" in the target's "INCLUDE_DIRECTORIES".
* The "Sublime Text 2" generator no longer runs the native build
command (e.g. "ninja" or "make") with verbose build output enabled.
* The "try_compile()" command source file signature now honors the
"CMAKE_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 key "HKLM\Software\Kitware\CMake" with a value named
"InstallDir".
----------------------------------------------------------------------------
Changes made since CMake 3.8.0-rc2:
Ben Boeckel (1):
FindHDF5: fix quoting
Brad King (22):
Revert "Remove CTestTestfile.cmake when BUILD_TESTING is OFF"
FindGit: Avoid finding VS 2017 non-general Git installation
Help: Fix typo in CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE
libarchive: backport rc4 crypto requirement update
FindHDF5: Improve HDF5_ROOT variable documentation
FindHDF5: Add option to skip finding package configuration file
Ninja: Fix Fortran 'include' dependency on generated file
FindwxWidgets: Use 'MSVC_VERSION' instead of 'MSVC##'
FindwxWidgets: Add support for VS 2017 v141 toolset
MSVC: Exclude future cl 20+ from MSVC14 variable
Help: Clarify MSVC14 docs w.r.t. VS 2017 v141 toolset
Help: Document preference of 'MSVC_VERSION' over 'MSVC##'
InstallRequiredSystemLibraries: Use 'MSVC_VERSION' instead of 'MSVC##'
InstallRequiredSystemLibraries: Refactor to avoid macros
InstallRequiredSystemLibraries: Drop version from variable names
FindBoost: Avoid mentioning discouraged 'MSVC##' variable
FindGTK2: Use 'MSVC_VERSION' instead of 'MSVC##'
FindRuby: Use 'MSVC_VERSION' instead of 'MSVC##'
InstallRequiredSystemLibraries: Split VS IDE and DLL versions
InstallRequiredSystemLibraries: Split MFC redist dir variable
InstallRequiredSystemLibraries: Add support for VS 2017
CMake 3.8.0-rc3
Daniel Black (1):
CPack/RPM: fix error message associated with source path length
Domen Vrankar (1):
CPack/RPM: fix cpack_rpm_debugsymbol_check parameter
Gregor Jasny (1):
FindBLAS/LAPACK: Format documentation
Kris Thielemans (1):
FindHDF5: Restore '-D' in HDF5_DEFINITIONS
Mateusz Łoskot (2):
FindBoost: Add support for 1.64
FindBoost: Update support for 1.64
Matthäus G. Chajdas (1):
FindVulkan: Fix for SDK versions < 1.0.42 on 32-bit Windows
Michael Stürmer (2):
VS: Do not treat custom targets as CSharp targets
CSharpUtilities: Fix documentation
Robert Maynard (1):
CUDA: Disable support for using response files.
Tobias Hunger (1):
server-mode: Make CMAKE_HOME_DIRECTORY more reliable
Wojciech Mamrak (1):
Help: Update MSVC_VERSION for Visual Studio 2017