[CMake] [ANNOUNCE] CMake 3.4.0 Released

Robert Maynard robert.maynard at kitware.com
Thu Nov 12 13:56:05 EST 2015


I am proud to announce that CMake 3.4.0 is now available for download at:
  https://cmake.org/download/

Documentation is available at:
  https://cmake.org/cmake/help/v3.4

Release notes appear below and are also published at
  https://cmake.org/cmake/help/v3.4/release/3.4.html

Some of the more significant features of CMake 3.4 are:

* The "if()" command learned a new "TEST" operator that evaluates to
  true if a given test name has been defined by the "add_test()"
  command.  See policy "CMP0064".

* The "install(DIRECTORY)" command "DESTINATION" option learned to
  support "generator expressions".

* The "install(FILES)" command "DESTINATION" option learned to
  support "generator expressions".

* CMake learned to honor "*.manifest" source files with MSVC tools.
  Manifest files named as sources of ".exe" and ".dll" targets will be
  merged with linker-generated manifests and embedded in the binary.


Deprecated and Removed Features:

* The "CMakeExpandImportedTargets" module is now documented as
  deprecated.  See module documentation for an explanation.

* The "CMAKE_USE_RELATIVE_PATHS" variable no longer has any effect.
  Previously it was partially implemented and unreliable.


CMake 3.4 Release Notes
***********************

Changes made since CMake 3.3 include the following.


New Features
============


Generators
----------

* The "Visual Studio 14 2015" generator learned to select a Windows
  10 SDK based on the value of the "CMAKE_SYSTEM_VERSION" variable and
  the SDKs available on the host.

* CMake learned rudimentary support for the Apple Swift language.
  When using the "Xcode" generator with Xcode 6.1 or higher, one may
  enable the "Swift" language with the "enable_language()" command or
  the "project()" command (this is an error with other generators or
  when Xcode is too old).  Then one may list ".swift" source files in
  targets for compilation.


Commands
--------

* The "find_program()" command learned a "NAMES_PER_DIR" option to
  consider all given "NAMES" in each directory before moving on to the
  next directory.

* The "get_filename_component()" command learned a new "BASE_DIR"
  subcommand.  This is used to specify a base directory when
  calculating an absolute path from a relative path.

* The "if()" command learned a new "TEST" operator that evaluates to
  true if a given test name has been defined by the "add_test()"
  command.  See policy "CMP0064".

* The "install(DIRECTORY)" command "DESTINATION" option learned to
  support "generator expressions".

* The "install(FILES)" command "DESTINATION" option learned to
  support "generator expressions".

* The "string()" command learned a new "APPEND" subcommand.


Variables
---------

* The Makefile Generators and the "Ninja" generator learned to add
  compiler launcher tools like distcc and ccache along with the
  compiler for "C" and "CXX" languages.  See the
  "CMAKE_<LANG>_COMPILER_LAUNCHER" variable and
  "<LANG>_COMPILER_LAUNCHER" target property for details.

* New "CMAKE_LINK_SEARCH_START_STATIC" and
  "CMAKE_LINK_SEARCH_END_STATIC" variables were introduced to
  initialize the "LINK_SEARCH_START_STATIC" and
  "LINK_SEARCH_END_STATIC" target properties, respectively.


Properties
----------

* Visual Studio Generators learned to support additonal target
  properties to customize projects for NVIDIA Nsight Tegra Visual
  Studio Edition:

  * "ANDROID_ANT_ADDITIONAL_OPTIONS"

  * "ANDROID_ARCH"

  * "ANDROID_ASSETS_DIRECTORIES"

  * "ANDROID_JAR_DEPENDENCIES"

  * "ANDROID_JAR_DIRECTORIES"

  * "ANDROID_JAVA_SOURCE_DIR"

  * "ANDROID_NATIVE_LIB_DEPENDENCIES"

  * "ANDROID_NATIVE_LIB_DIRECTORIES"

  * "ANDROID_PROCESS_MAX"

  * "ANDROID_PROGUARD"

  * "ANDROID_PROGUARD_CONFIG_PATH"

  * "ANDROID_SECURE_PROPS_PATH"

  * "ANDROID_SKIP_ANT_STEP"

  * "ANDROID_STL_TYPE"

* The "ARCHIVE_OUTPUT_DIRECTORY", "LIBRARY_OUTPUT_DIRECTORY", and
  "RUNTIME_OUTPUT_DIRECTORY" target properties learned to support
  "generator expressions".

* The "SOURCE_DIR" and "BINARY_DIR" target properties were
  introduced to allow project code to query where a target is defined.

* The "OUTPUT_NAME" target property and its variants learned to
  support "generator expressions".

* A "TARGET_MESSAGES" global property was added to tell the Makefile
  Generators whether to generate commands to print output after each
  target is completed.

* On Windows with MS-compatible tools, CMake learned to optionally
  generate a module definition (".def") file for "SHARED" libraries.
  See the "WINDOWS_EXPORT_ALL_SYMBOLS" target property.


Modules
-------

* The "ExternalProject" module "ExternalProject_Add()" function
  "GIT_SUBMODULES" option now also limits the set of submodules that
  are initialized in addition to the prior behavior of limiting the
  set of submodules that are updated.

* The "ExternalProject" module learned new "USES_TERMINAL" arguments
  for giving steps exclusive terminal access.  This is useful with the
  "Ninja" generator to monitor CMake superbuild progress and prevent
  CPU oversubscription.

* The "FindBISON" module "BISON_TARGET" macro learned a new
  "DEFINES_FILE" option to specify a custom output header to be
  generated.

* The "FindHDF5" module learend a new "HDF5_PREFER_PARALLEL" option
  allowing users to specify that a parallel HDF5 tool is preferred if
  both are available.

* The "FindIce" module now provides imported targets.

* The "FindJava" module learned to optionally find the "idlj" and
  "jarsigner" tools.

* The "FindOpenSSL" module now provides imported targets.

* The "FindOpenSSL" module learned a new "OPENSSL_USE_STATIC_LIBS"
  option to search only for static libraries.

* The "FindPkgConfig" learned a new "pkg_get_variable()" command
  which may be used to query for arbitrary variables from a package
  (such as for related tools or data and plugin install paths).

* The "FindProtobuf" module gained a new
  "protobuf_generate_python()" function to generate python sources
  from ".proto" files.

* The "FindTIFF" module learned to search separately for debug and
  release variants.

* The "FindwxWidgets" module learned to support version requests.

* The "FindXercesC" module learned to search separately for debug
  and release variants.

* The "FindZLIB" module learned to search separately for debug and
  release variants.

* The "GNUInstallDirs" module learned special default values for
  certain installation prefixes according to the GNU Coding Standards
  and the Filesystem Hierarchy Standard.

* The "UseJava" module "add_jar" function learned to support
  response files (e.g. "@srcs.txt") for source specification.

* The "UseJava" module "install_jar" function learned new
  "DESTINATION" and "COMPONENT" options to specify the corresponding
  "install()" command options.

* The "UseJava" module gained a new "create_javah" function to
  create C headers from Java classes.


Generator Expressions
---------------------

* A new "$<SHELL_PATH:...>" "generator expression" has been added.


CTest
-----

* CTest learned to optionally measure the CPU load during parallel
  testing and avoid starting tests that may cause the load to exceed a
  given threshold.  See the "ctest(1)" command "--test-load" option,
  the "TestLoad" setting of the CTest Test Step, the "CTEST_TEST_LOAD"
  variable, and the "TEST_LOAD" option of the "ctest_test()" command.

* "ctest(1)" learned options "--test-output-size-passed" and "--
  test- output-size-failed" to customize the limit on test output size
  submitted when running as a Dashboard Client.


CPack
-----

* The "CPackDeb" module learned to set package dependencies per
  component.  See variables:

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES"

  * "CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS"

* The "CPack" module learned to package empty directories.

* The "CPack" module gained a new setting,
  "CPACK_VERBATIM_VARIABLES", which can be used to ensure the cpack
  program receives the settings' values exactly as they were set, even
  if they contain CMake-special characters. For compatibility, it's
  off by default.


Other
-----

* The "Compile Features" functionality is now aware of features
  supported by GNU C compilers on Windows.

* CMake learned to honor "*.manifest" source files with MSVC tools.
  Manifest files named as sources of ".exe" and ".dll" targets will be
  merged with linker-generated manifests and embedded in the binary.

* The Concurrent Fortran 77 compiler is now supported. Its "compiler
  id" is "CCur".

* "cmake(1)" gained a new "--trace-expand" command line option that
  is like "--trace" but expands variable references in the output.


Deprecated and Removed Features
===============================

* The "CMakeExpandImportedTargets" module is now documented as
  deprecated.  See module documentation for an explanation.

* The "CMAKE_USE_RELATIVE_PATHS" variable no longer has any effect.
  Previously it was partially implemented and unreliable.


Other Changes
=============

* The "CheckFunctionExists", "CheckLibraryExists",
  "CheckSymbolExists", and "FindThreads" modules learned to work in
  environments where only CXX is enabled.

* The "CPackDeb" module now correctly excludes symlinks during
  package checksum calculation.

* The "CPackDeb" no longer uses fakeroot and system tar program for
  packaging.

* The "CPack" module no longer mangles settings with CMake-special
  characters when they're used as defaults for other settings. The
  macro "cpack_set_if_not_set", which was responsible for this, is now
  deprecated.

* CMake no longer links executables with flags to export symbols
  unless the "ENABLE_EXPORTS" target property is set. See policy
  "CMP0065".

* The "SONAME" field is no longer set for "MODULE" libraries created
  with the "add_library()" command.  "MODULE" libraries are meant for
  explicit dynamic loading at runtime. They cannot be linked so
  "SONAME" is not useful.

* The internal "CMAKE__COMPILE_OBJECT" rule variable now
  substitutes compiler include flags in a separate "<INCLUDES>"
  placeholder instead of the main "<FLAGS>" placeholder.

--------------------------------------------------------------------
Changes made since CMake 3.4.0-rc3:

Brad King (1):
      CMake 3.4.0

Stephen Kelly (1):
      Install: Move SetHaveInstallRule to a more-obvious place


More information about the CMake mailing list