CMake 3.4 Release Notes

Changes made since CMake 3.3 include the following.

New Features


  • 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.





  • 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


  • 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.



  • 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

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_<LANG>_COMPILE_OBJECT rule variable now substitutes compiler include flags in a separate <INCLUDES> placeholder instead of the main <FLAGS> placeholder.