CMake 3.3.0-rc1 is now ready!

June 5, 2015

I am proud to announce the first 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.

* When building with GNU tools on Windows (MinGW tools), the
  "find_library()" command will no longer consider ".dll" files to be
  linkable libraries.  All dynamic link libraries are expected to
  provide separate ".dll.a" or ".lib" import libraries.

* 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".
 

 

Leave a Reply