CMake 3.1.0 Release Notes

Changes made since CMake 3.0.0 include the following.

New Features

Generators

Windows Phone and Windows Store

  • Generators for Visual Studio 11 (2012) and above learned to generate projects for Windows Phone and Windows Store. One may set the CMAKE_SYSTEM_NAME variable to WindowsPhone or WindowsStore on the cmake(1) command-line or in a CMAKE_TOOLCHAIN_FILE to activate these platforms. Also set CMAKE_SYSTEM_VERSION to 8.0 or 8.1 to specify the version of Windows to be targeted.

NVIDIA Nsight Tegra

  • Generators for Visual Studio 10 (2010) and above learned to generate projects for NVIDIA Nsight Tegra Visual Studio Edition. One may set the CMAKE_SYSTEM_NAME variable to Android on the cmake(1) command-line or in a CMAKE_TOOLCHAIN_FILE to activate this platform.

Syntax

Commands

Variables

  • The Visual Studio generators for versions 8 (2005) and above learned to read the target platform name from a new CMAKE_GENERATOR_PLATFORM variable when it is not specified as part of the generator name. The platform name may be specified on the cmake(1) command line with the -A option, e.g. -G "Visual Studio 12 2013" -A x64.
  • The CMAKE_GENERATOR_TOOLSET variable may now be initialized in a toolchain file specified by the CMAKE_TOOLCHAIN_FILE variable. This is useful when cross-compiling with the Xcode or Visual Studio generators.
  • The CMAKE_INSTALL_MESSAGE variable was introduced to optionally reduce output installation.

Properties

Modules

  • The BundleUtilities module learned to resolve and replace @rpath placeholders on OS X to correctly bundle applications using them.
  • The CMakePackageConfigHelpers module configure_package_config_file() command learned a new INSTALL_PREFIX option to generate package configuration files meant for a prefix other than CMAKE_INSTALL_PREFIX.
  • The CheckFortranSourceCompiles module was added to provide a CHECK_Fortran_SOURCE_COMPILES macro.
  • The ExternalData module learned to tolerate a DATA{} reference to a missing source file with a warning instead of rejecting it with an error. This helps developers write new DATA{} references to test reference outputs that have not yet been created.
  • The ExternalProject module learned to support lzma-compressed source tarballs with .7z, .tar.xz, and .txz extensions.
  • The ExternalProject module ExternalProject_Add command learned a new BUILD_ALWAYS option to cause the external project build step to run every time the host project is built.
  • The ExternalProject module ExternalProject_Add command learned a new EXCLUDE_FROM_ALL option to cause the external project target to have the EXCLUDE_FROM_ALL target property set.
  • The ExternalProject module ExternalProject_Add_Step command learned a new EXCLUDE_FROM_MAIN option to cause the step to not be a direct dependency of the main external project target.
  • The ExternalProject module ExternalProject_Add command learned a new DOWNLOAD_NO_PROGRESS option to disable progress output while downloading the source tarball.
  • The FeatureSummary module feature_summary API learned to accept multiple values for the WHAT option and combine them appropriately.
  • The FindCUDA module learned to support fatbin and cubin modules.
  • The FindGTest module gtest_add_tests macro learned a new AUTO option to automatically read the SOURCES target property of the test executable and scan the source files for tests to be added.
  • The FindGLEW module now provides imported targets.
  • The FindGLUT module now provides imported targets.
  • The FindHg module gained a new Hg_WC_INFO macro to help run hg to extract information about a Mercurial work copy.
  • The FindOpenCL module was introduced.
  • The FindOpenMP module learned to support Fortran.
  • The FindPkgConfig module learned to use the PKG_CONFIG environment variable value as the pkg-config executable, if set.
  • The FindXercesC module was introduced.
  • The FindZLIB module now provides imported targets.
  • The GenerateExportHeader module generate_export_header function learned to allow use with Object Libraries.
  • The InstallRequiredSystemLibraries module gained a new CMAKE_INSTALL_OPENMP_LIBRARIES option to install MSVC OpenMP runtime libraries.
  • The UseSWIG module learned to detect the module name from .i source files if possible to avoid the need to set the SWIG_MODULE_NAME source file property explicitly.
  • The WriteCompilerDetectionHeader module was added to allow creation of a portable header file for compiler optional feature detection.

Generator Expressions

  • New COMPILE_FEATURES generator expression allows setting build properties based on available compiler features.

CTest

  • The ctest_coverage() command learned to read variable CTEST_COVERAGE_EXTRA_FLAGS to set CoverageExtraFlags.
  • The ctest_coverage() command learned to support Intel coverage files with the codecov tool.
  • The ctest_memcheck() command learned to support sanitizer modes, including AddressSanitizer, MemorySanitizer, ThreadSanitizer, and UndefinedBehaviorSanitizer. Options may be set using the new CTEST_MEMORYCHECK_SANITIZER_OPTIONS variable.

CPack

  • cpack(1) gained an IFW generator to package using Qt Framework Installer tools. See the CPackIFW module.
  • cpack(1) gained 7Z and TXZ generators supporting lzma-compressed archives.
  • The CPackDeb module learned a new CPACK_DEBIAN_COMPRESSION_TYPE variable to set the tarball compression type.
  • The cpack(1) WiX generator learned to support a CPACK_WIX_ACL installed file property to specify an Access Control List.

Other

  • The cmake(1) -E option learned a new env command.
  • The cmake(1) -E tar command learned to support lzma-compressed files.
  • Object Libraries may now have extra sources that do not compile to object files so long as they would not affect linking of a normal library (e.g. .dat is okay but not .def).
  • Visual Studio generators for VS 8 and later learned to support the ASM_MASM language.
  • The Visual Studio generators learned to treat .hlsl source files as High Level Shading Language sources (using FXCompile in .vcxproj files). Source file properties VS_SHADER_TYPE, VS_SHADER_MODEL, and VS_SHADER_ENTRYPOINT were added added to specify the shader type, model, and entry point name.

New Diagnostics

Deprecated and Removed Features

  • In CMake 3.0 the target_link_libraries() command accidentally began allowing unquoted arguments to use generator expressions containing a (; separated) list within them. For example:

    set(libs B C)
    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:${libs}>)
    

    This is equivalent to writing:

    target_link_libraries(A PUBLIC $<BUILD_INTERFACE:B C>)
    

    and was never intended to work. It did not work in CMake 2.8.12. Such generator expressions should be in quoted arguments:

    set(libs B C)
    target_link_libraries(A PUBLIC "$<BUILD_INTERFACE:${libs}>")
    

    CMake 3.1 again requires the quotes for this to work correctly.

  • Callbacks established by the variable_watch() command will no longer receive the ALLOWED_UNKNOWN_READ_ACCESS access type when the undocumented CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS variable is set. Uninitialized variable accesses will always be reported as UNKNOWN_READ_ACCESS.

  • The CMakeDetermineVSServicePack module now warns that it is deprecated and should not longer be used. Use the CMAKE_<LANG>_COMPILER_VERSION variable instead.

  • The FindITK module has been removed altogether. It was a thin-wrapper around find_package(ITK ... NO_MODULE). This produces much clearer error messages when ITK is not found.

  • The FindVTK module has been removed altogether. It was a thin-wrapper around find_package(VTK ... NO_MODULE). This produces much clearer error messages when VTK is not found.

    The module also provided compatibility support for finding VTK 4.0. This capability has been dropped.

Other Changes

  • The cmake-gui(1) learned to capture output from child processes started by the execute_process() command and display it in the output window.
  • The cmake-language(7) internal implementation of generator expression and list expansion parsers have been optimized and shows non-trivial speedup on large projects.
  • The Makefile generators learned to use response files with GNU tools on Windows to pass library directories and names to the linker.
  • When generating linker command-lines, CMake now avoids repeating items corresponding to SHARED library targets.
  • Support for the Open Watcom compiler has been overhauled. The CMAKE_<LANG>_COMPILER_ID is now OpenWatcom, and the CMAKE_<LANG>_COMPILER_VERSION now uses the Open Watcom external version numbering. The external version numbers are lower than the internal version number by 11.
  • The cmake-mode.el major Emacs editing mode no longer treats _ as part of words, making it more consistent with other major modes.