CMake 3.3.0-rc2 is now ready!
I am proud to announce the second CMake 3.3 release candidate.
Sources and binaries are available at:
http://www.cmake.org/download/
Documentation is available at:
http://www.cmake.org/cmake/help/v3.3
Release notes appear below and are also published at
http://www.cmake.org/cmake/help/v3.3/release/3.3.html
Some of the more significant features of CMake 3.3 are:
* The “if()” command learned a new “IN_LIST” operator that evaluates
to true if a given element is contained in a named list.
* The “add_dependencies()” command learned to allow dependencies to
be added to *interface libraries*. Dependencies added to an
interface library are followed transitively in its place since the
target itself does not build.
* The “find_library()”, “find_path()”, and “find_file()” commands
now search in installation prefixes derived from the “PATH”
environment variable.
* The “<LANG>_VISIBILITY_PRESET” and “VISIBILITY_INLINES_HIDDEN”
target properties now affect compilation in sources of all target
types. See policy “CMP0063”.
* A “<LANG>_INCLUDE_WHAT_YOU_USE” target property and supporting
“CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE” variable were introduced to tell
the *Makefile Generators* and the “Ninja” generator to run “include-
what-you-use” along with the compiler for “C” and “CXX” languages.
Deprecated and Removed Features:
* The “ctest_build()” and “build_command()” commands no longer tell
“make” tools to ignore errors with the “-i” option. Previously this
was done for *Makefile Generators* but not others. See policy
“CMP0061”.
* The “Visual Studio 7” generator (.NET 2002) is now deprecated and
will be removed in a future version of CMake.
* The “Visual Studio 6” generator is now deprecated and will be
removed in a future version of CMake.
* The “add_definitions()” command no longer causes a “DEFINITIONS”
directory property to be populated. See policy “CMP0059”.
CMake 3.3 Release Notes
***********************
Changes made since CMake 3.2 include the following.
New Features
============
Generators
———-
* The *Makefile Generators* now add “.DELETE_ON_ERROR” to the
makefiles that contain the actual build rules for files on disk.
This tells GNU make to remove rule outputs when their recipe
modifies an output but fails.
* The *Visual Studio Generators* learned to support “.xaml” source
files and automatically associate them with corresponding “.h” and
“.cpp” sources.
* A new experimental “Green Hills MULTI” generator was added on
Windows. Green Hills MULTI is an IDE for embedded real-time
systems.
Commands
——–
* The “add_dependencies()” command learned to allow dependencies to
be added to *interface libraries*. Dependencies added to an
interface library are followed transitively in its place since the
target itself does not build.
* The “execute_process()” command learned to support specifying the
same file for “OUTPUT_FILE” and “ERROR_FILE”.
* The “file(GLOB)” and “file(GLOB_RECURSE)” commands learned a new
“LIST_DIRECTORIES <bool>” option to specify whether the glob result
should include directories.
* The “find_library()”, “find_path()”, and “find_file()” commands
now search in installation prefixes derived from the “PATH”
environment variable.
* The “if()” command learned a new “IN_LIST” operator that evaluates
to true if a given element is contained in a named list.
* The “install(EXPORT)” and “export()” commands learned to export
targets that populate the “INTERFACE_SOURCES” target property.
* The “install(TARGETS)” command learned to support generator
expressions in the “DESTINATION” value.
Variables
———
* The version of some Fortran compilers is now detected and stored
in the “CMAKE_Fortran_COMPILER_VERSION” variable.
* The *Visual Studio Generators* learned a new
“CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD” option to put the
“INSTALL” target in the default build of a solution (“.sln”) file.
Properties
———-
* A “CROSSCOMPILING_EMULATOR” target property and supporting
“CMAKE_CROSSCOMPILING_EMULATOR” variable were introduced to allow
target platform binaries to run on the host during cross compiling.
* A “<LANG>_INCLUDE_WHAT_YOU_USE” target property and supporting
“CMAKE_<LANG>_INCLUDE_WHAT_YOU_USE” variable were introduced to tell
the *Makefile Generators* and the “Ninja” generator to run “include-
what-you-use” along with the compiler for “C” and “CXX” languages.
* The “<LANG>_VISIBILITY_PRESET” and “VISIBILITY_INLINES_HIDDEN”
target properties now affect compilation in sources of all target
types. See policy “CMP0063”.
* The “XCODE_ATTRIBUTE_<an-attribute>” target property learned to
support generator expressions.
Modules
——-
* The “CheckFortranCompilerFlag” module was introduced to check
“Fortran” compiler flags, much like the “CheckCCompilerFlag” module
already does for “C”.
* The “ExternalData” module learned a new “ExternalData_NO_SYMLINKS”
option to disable use of symbolic links to populate the real data
files and use copies instead.
* The “ExternalData” module learned a new “RECURSE:” option in
“DATA{}” references specifying directories. This allows an entire
directory tree of associated files to be matched.
* The “ExternalData” module learned a new URL template placeholder
“%(algo:<key>)” to allow custom mapping from algorithm name to URL
component through configuration of new
“ExternalData_URL_ALGO_<algo>_<key>” variables. This allows more
flexibility in remote URLs.
* The “ExternalProject” module learned to replace tokens like
“<BINARY_DIR>” in the “BYPRODUCTS” of each step.
* The “ExternalProject” module APIs learned to support “generator
expressions” when using “LOG_*” options and in CMake initial cache
options.
* The “FindBoost” module now tracks the directories containing
libraries separately for RELEASE and DEBUG configurations.
* The “FindCUDA” module now defaults to using the static CUDA
runtime library if it is available. A new
“CUDA_USE_STATIC_CUDA_RUNTIME” option is offered to control this
behavior.
* The “FindMatlab” module was completely rewritten. It learned
about versions and components and to find Matlab in a more precise
and multiplatform way. The module now offers APIs to create mex
extensions, documentation, and unit tests.
* The “FindPackageHandleStandardArgs” module
“FIND_PACKAGE_HANDLE_STANDARD_ARGS” function now always populates
both the “<PackageName>_FOUND” and “<UPPERCASE_NAME>_FOUND”
variables (the latter for backwards compatibility). The “FOUND_VAR”
option is now ignored except to enforce its allowed values.
* The “InstallRequiredSystemLibraries” module learned a new
“CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT” option to specify the
installation component.
Generator Expressions
———————
* A new “COMPILE_LANGUAGE” generator expression was introduced to
allow specification of compile options for target files based on the
“LANGUAGE” of each source file. Due to limitations of the
underlying native build tools, this feature has varying support
across generators. See the “cmake-generator-expressions(7)” manual
for details.
CTest
—–
* The “ctest(1)” tool learned a new “–repeat-until-fail <n>” option
to help find sporadic test failures.
* The “CTestCoverageCollectGCOV” module learned to support the same
“CTEST_CUSTOM_COVERAGE_EXCLUDE” option as the “ctest_coverage()”
command.
CPack
—–
* The “cpack(1)” “IFW” generator and the “CPackIFW” module learned
to support Qt Framework Installer 2.0 tools.
* The “CPackDeb” module learned a new
“CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS” variable to specify
per-component use of “dpkg-shlibdeps”.
* The “CPackDeb” module learned a new
“CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS” option to specify per-
component dependencies.
* The “CPackRPM” module learned to package symbolic links more
cleanly and now supports directory symlinks with recent “rpmbuild”
versions.
* The “CPackRPM” module learned a new
“CPACK_RPM_ADDITIONAL_MAN_DIRS” variable to specify directories
containing man pages for the brp- compress RPM macro.
* The “CPackRPM” module learned a new
“CPACK_RPM_<component>_PACKAGE_ARCHITECTURE” variable to specify a
component-specific package architecture.
* The CPack WIX generator learned the new
“CPACK_START_MENU_SHORTCUTS”, “CPACK_DESKTOP_SHORTCUTS” and
“CPACK_STARTUP_SHORTCUTS” installed file properties which can be
used to install shorcuts in the Start Menu, on the Desktop and in
the Startup Folder respectively.
Other
—–
* The “Compile Features” functionality is now aware of features
supported by GNU compilers on Windows, versions 4.4 through 5.0.
* The “cmake(1)” “-E tar” command learned a new “–format<format>”
option to specify the archive format to be written.
* On OS X, CMake learned to create XCTest bundles to test Frameworks
and App Bundles within Xcode. The “FindXCTest” module provides
convenience functions to handle “XCTEST” bundles.
Deprecated and Removed Features
===============================
* On OS X the “cmake-gui(1)” no longer has the “Install For Command
Line Use” menu item. Instead there is a “How to Install For Command
Line Use” menu item that shows an informational dialog box
explaining how to make the command line tools available. For
example:
/Applications/CMake.app/Contents/bin/cmake-gui –install
* The “ctest_build()” and “build_command()” commands no longer tell
“make” tools to ignore errors with the “-i” option. Previously this
was done for *Makefile Generators* but not others. See policy
“CMP0061”.
* The “Visual Studio 10 2010” generator no longer checks for running
VS IDEs with the project open or asks them to reload. This was
originally done for VS 10 because it had been done for VS 7 through
9 to avoid prompting for every project in a solution. Since VS >= 10
allow the whole solution to reload at once they do not need CMake to
help them.
* The “Visual Studio 7” generator (.NET 2002) is now deprecated and
will be removed in a future version of CMake.
* The “Visual Studio 6” generator is now deprecated and will be
removed in a future version of CMake.
* The “find_package()” command no longer considers project build
trees recently configured in a “cmake-gui(1)”. This was previously
done only on Windows and is now never done. The
“NO_CMAKE_BUILDS_PATH” option is now ignored if given and
effectively always on. Projects may populate the *User Package
Registry* to aid users building multiple dependent projects one
after another.
* The “add_definitions()” command no longer causes a “DEFINITIONS”
directory property to be populated. See policy “CMP0059”.
* With Visual Studio 7, 8, and 9 generators the value of the
“$(OutDir)” placeholder no longer evaluates to the configuration
name. Projects should use “$(ConfigurationName)” for that instead.
* Using the output of “export()” with the “install(FILES)” command
is no longer allowed. See policy “CMP0062” for details.
Other Changes
=============
* The “Ninja” generator now requires that calls to the
“add_custom_command()” and “add_custom_target()” commands use the
“BYPRODUCTS” option to explicitly specify any files generated by the
custom commands that are not listed as outputs (perhaps because
their timestamps are allowed to be older than the inputs). See
policy “CMP0058”.
* Build-time progress output of *Makefile Generators* has been
improved. It no longer mixes progress and build rule messages during
parallel builds. The link rule messages now have progress and are
displayed as bold green instead of bold red (since red is often
associated with an error message).
* The “CMAKE_CFG_INTDIR” variable value for Visual Studio 7, 8, and
9 is now “$(ConfigurationName)” instead of “$(OutDir)”. This should
have no effect on the intended use cases of the variable.
* Linking to library files by a full path in an implicit linker
search directory (e.g. “/usr/lib/libfoo.a”) no longer asks the
linker to search for the library (e.g. “-lfoo”) and now links by
full path. See policy “CMP0060”.
——————————————————————-
Changes made since CMake 3.3.0-rc1:
Brad King (7):
Help: Reference TARGET_FILE genex in add_custom_command docs (#15605)
FindwxWidgets: Fix find_program call for versioned names
Windows-GNU: Restore find_library treatment of ‘.dll’ as linkable (#15409)
ctest: Disable CMake Cygwin legacy warning in dashboard client script
Help: Drop incorrect advice from cmake-developer.7 manual
Help: Document explicitly that policy OLD behavior is deprecated
CMake 3.3.0-rc2
Clinton Stimpson (1):
cmake-gui: Make command-line install help text selectable
——————————————————————-