CMake 3.7.0-rc3 is now ready!

November 4, 2016

I am proud to announce the third CMake 3.7 release candidate.
https://cmake.org/download/

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

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

Some of the more significant changes in CMake 3.7 are:

  • CMake now supports Cross Compiling for Android with simple toolchain files.
  • The “Ninja” generator learned to conditionally support Fortran when using a “ninja” tool that has the necessary features. See generator documentation for details.
  • The “if()” command gained new boolean comparison operations “LESS_EQUAL”, “GREATER_EQUAL”, “STRLESS_EQUAL”, “STRGREATER_EQUAL”, “VERSION_LESS_EQUAL”, and “VERSION_GREATER_EQUAL”.
  • The “try_compile()” command source file signature now honors configuration-specific flags (e.g. “CMAKE_<LANG>_FLAGS_DEBUG”) in the generated test project. Previously only the default such flags for the current toolchain were used. See policy “CMP0066”.
  • “Toolchain files” may now set “CMAKE_EXE_LINKER_FLAGS_INIT”, “CMAKE_SHARED_LINKER_FLAGS_INIT”, and “CMAKE_MODULE_LINKER_FLAGS_INIT” variables to initialize the “CMAKE_EXE_LINKER_FLAGS”, “CMAKE_SHARED_LINKER_FLAGS”, and “CMAKE_MODULE_LINKER_FLAGS” cache entries the first time a language is enabled in a build tree.
  • CTest now supports test fixtures through the new “FIXTURES_SETUP”, “FIXTURES_CLEANUP” and “FIXTURES_REQUIRED” test properties. When using regular expressions or “–rerun-failed” to limit the tests to be run, a fixture’s setup and cleanup tests will automatically be added to the execution set if any test requires that fixture.
  • We no longer provide Linux i386 binaries for download from “cmake.org” for new versions of CMake.
  • Vim support files “cmake-indent.vim”, “cmake-syntax.vim”, and “cmake-help.vim” have been removed in favor of the files now provided from the vim-cmake-syntax project.
  • Support for building CMake itself with some compilers was dropped:
    • Visual Studio 7.1 and 2005 — superseded by VS 2008 and above
    • MinGW.org mingw32 — superseded by MSYS2 mingw32 and mingw64

    CMake still supports generating build systems for other projects using these compilers.

CMake 3.7 Release Notes
***********************

Changes made since CMake 3.6 include the following.


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


Platforms
---------

* CMake now supports Cross Compiling for Android with simple
  toolchain files.

* The Clang compiler is now supported on AIX.


Generators
----------

* The "Ninja" generator learned to conditionally support Fortran
  when using a "ninja" tool that has the necessary features. See
  generator documentation for details.

* The "Ninja" generator learned to produce phony targets of the form
  "sub/dir/{test,install,package}" to drive the build of a
  subdirectory installation, test or packaging target. This is
  equivalent to "cd sub/dir; make {test,install,package}" with
  Makefile Generators.

* The "Visual Studio 15" generator was added.  This is experimental
  and based on Preview 4 because this version of VS has not been
  released.

* Visual Studio Generators for VS 2010 and above learned to place
  ".natvis" source files into VS project files properly.

* The "Xcode" generator's rudimentary Swift language support learned
  to honor a new "CMAKE_Swift_LANGUAGE_VERSION" variable to tell Xcode
  what version of Swift is used by the source.

* The "CodeLite" generator gained a new "CMAKE_CODELITE_USE_TARGETS"
  option to change project creation from projects to targets.


Commands
--------

* The "add_custom_command()" command gained a new "DEPFILE" option
  that works with the "Ninja" generator to provide implicit dependency
  information to the build tool.

* The "cmake_parse_arguments()" command gained a new "PARSE_ARGV"
  mode to read arguments directly from "ARGC" and "ARGV#" variables
  inside a "function()" body.

* The "export()" command gained an "ANDROID_MK" option to generate
  "Android.mk" files referencing CMake-built libraries as prebuilts
  for the Android NDK build system.

* The "file(DOWNLOAD)" and "file(UPLOAD)" commands gained
  "HTTPHEADER <HTTP-header>" and "USERPWD <username>:<password>"
  options.

* The "find_library()" and "find_package()" commands learned to
  search in "lib32/" directories when the build targets a 32-bit
  architecture.  See the "FIND_LIBRARY_USE_LIB32_PATHS" global
  property.

* The "find_package()" command gained the possibility of sorting
  compatible libraries by "NAME" or by "NATURAL" sorting by setting
  the two new variables "CMAKE_FIND_PACKAGE_SORT_ORDER" and
  "CMAKE_FIND_PACKAGE_SORT_DIRECTION".

* The "if()" command gained new boolean comparison operations
  "LESS_EQUAL", "GREATER_EQUAL", "STRLESS_EQUAL", "STRGREATER_EQUAL",
  "VERSION_LESS_EQUAL", and "VERSION_GREATER_EQUAL".

* The "install()" command gained an "EXPORT_ANDROID_MK" subcommand
  to install "Android.mk" files referencing installed libraries as
  prebuilts for the Android NDK build system.

* The "string(TIMESTAMP)" and "file(TIMESTAMP)" commands gained
  support for the "%a" and "%b" placeholders. These are the
  abbreviated weekday and month names.

* The "try_compile()" command source file signature now honors
  configuration-specific flags (e.g. "CMAKE_<LANG>_FLAGS_DEBUG") in
  the generated test project.  Previously only the default such flags
  for the current toolchain were used.  See policy "CMP0066".


Variables
---------

* Variable "CMAKE_FIND_PACKAGE_SORT_ORDER" was added to control the
  sorting mode of the "find_package()" command.

* Variable "CMAKE_FIND_PACKAGE_SORT_DIRECTION" was added to control
  the sorting direction the "find_package()" command.

* "Toolchain files" may now set a "CMAKE_<LANG>_FLAGS_INIT" variable
  to initialize the "CMAKE_<LANG>_FLAGS" cache entry the first time a
  language is enabled in a build tree.

* "Toolchain files" may now set "CMAKE_EXE_LINKER_FLAGS_INIT",
  "CMAKE_SHARED_LINKER_FLAGS_INIT", and
  "CMAKE_MODULE_LINKER_FLAGS_INIT" variables to initialize the
  "CMAKE_EXE_LINKER_FLAGS", "CMAKE_SHARED_LINKER_FLAGS", and
  "CMAKE_MODULE_LINKER_FLAGS" cache entries the first time a language
  is enabled in a build tree.


Properties
----------

* On Apple platforms the "BUNDLE_EXTENSION" target property now also
  applies to Frameworks and App Bundles.

* A "BINARY_DIR" directory property was added to get the absolute
  path to the binary directory corresponding to the source directory
  on which the property is read.

* A "BUILDSYSTEM_TARGETS" directory property was added to get the
  list of logical buildsystem target names added by the project in a
  directory.

* A "LINK_WHAT_YOU_USE" target property and supporting
  "CMAKE_LINK_WHAT_YOU_USE" variable were introduced to detect (on
  UNIX) shared libraries that are linked but not needed by running
  "ldd -r -u".

* A "SOURCE_DIR" directory property was added to get the absolute
  path to the source directory associated with a directory.

* A "SUBDIRECTORIES" directory property was added to get the list of
  subdirectories added by a project in a directory.

* A "VS_SDK_REFERENCES" target property was added to tell Visual
  Studio Generators to reference the named SDKs.

* A "VS_TOOL_OVERRIDE" source file property was created to tell
  Visual Studio Generators what tool to use for a source file.

* The "WINDOWS_EXPORT_ALL_SYMBOLS" target property now applies to
  executable targets with the "ENABLE_EXPORTS" property set.

* A "XCODE_FILE_ATTRIBUTES" source file property was added to tell
  the "Xcode" generator to generate custom content in the Xcode
  project attributes for the file.


Modules
-------

* An "AndroidTestUtilities" module was added to manage transfer of
  test data to an Android device.

* The "CheckFortranSourceCompiles" module macro
  "CHECK_Fortran_SOURCE_COMPILES" gained a "SRC_EXT" option to specify
  a custom test Fortran source file extension.

* The "ExternalProject" module gained "HTTP_USERNAME" and
  "HTTP_PASSWORD" options to set http download credentials.

* The "ExternalProject" module gained a "HTTP_HEADER" option to add
  http download headers.

* The "FindBISON" module "BISON_TARGET" macro learned a new
  "REPORT_FILE" option to specify the bison "--report-file=" option.

* The "FindBZip2" module now provides imported targets.

* A "FindICU" module was introduced to find the International
  Components for Unicode (ICU) libraries and programs.

* The "FindMatlab" module learned to find the SIMULINK and MAT components.

* The "FindMatlab" module "matlab_add_mex()" command learned to add
  executables and modules.

* The "FindMatlab" module "matlab_add_unit_test()" command learned
  to support inline Matlab test code.

* The "FindOpenCL" module now provides imported targets.

* The "FindOpenMP" module learned to detect the OpenMP version
  (specification date) from the compiler.

* A "FindVulkan" module was added.

* The "GenerateExportHeader" module learned a new
  "CUSTOM_CONTENT_FROM_VARIABLE" option to specify a variable
  containing custom content for inclusion in the generated header.

* The "GNUInstallDirs" module gained a new
  "GNUInstallDirs_get_absolute_install_dir()" command.

* The "UseJava" module gained APIs to "export" jar targets for use
  by external CMake projects.  See the "install_jar_exports" and
  "export_jars" functions.


CTest
-----

* CTest now supports test fixtures through the new "FIXTURES_SETUP",
  "FIXTURES_CLEANUP" and "FIXTURES_REQUIRED" test properties. When
  using regular expressions or "--rerun-failed" to limit the tests to
  be run, a fixture's setup and cleanup tests will automatically be
  added to the execution set if any test requires that fixture.

* The "ctest_configure()", "ctest_build()", "ctest_test()",
  "ctest_coverage()", and "ctest_upload()" commands gained a new
  "CAPTURE_CMAKE_ERROR" option to capture any errors that occur as the
  commands run into a variable and avoid affecting the return code of
  the "ctest(1)" process.


CPack
-----

* CPack gained a "productbuild" generator on OS X, configured by the
  "CPackProductBuild" module.

* CPack gained a new "CPACK_PACKAGE_CHECKSUM" variable to enable
  generation of a checksum file for each package file.

* The "CPackDeb" module learned to support long file names when
  archive format is set to GNU tar. See "CPACK_DEBIAN_ARCHIVE_TYPE"

* The "CPackIFW" module gained a new
  "cpack_ifw_add_package_resources()" command to include additional
  resources in the installer binary.

* The "CPackIFW" module "cpack_ifw_configure_component()" and
  "cpack_ifw_configure_component_group()" commands gained a new
  "USER_INTERFACES" option to add a list of additonal pages to the IFW
  installer.

* The "CPackRPM" module learned to generate debuginfo packages on
  demand. See "CPACK_RPM_DEBUGINFO_PACKAGE" and its per component
  version.

* The "CPackRPM" module learned to generate source rpm (SRPM)
  packages on demand. See "CPACK_RPM_PACKAGE_SOURCES",
  "CPACK_RPM_SOURCE_PKG_BUILD_PARAMS" and
  "CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX".

* The CPack NSIS generator now supports
  "CPACK_NSIS_<compName>_INSTALL_DIRECTORY". This can be used to set
  component specific installation directories.

* The CPack WIX generator now supports
  "CPACK_WIX_SKIP_PROGRAM_FOLDER" to allow specification of a custom
  absolute installation prefix outside of the ProgramFiles folders.

* The CPack WIX generator now supports
  "CPACK_COMPONENT_<compName>_DISABLED". This can be used to deselect
  a component from being installed by default.

* The CPack WIX generator now supports "CPACK_WIX_PATCH_FILE"
  fragments for Feature elements.

* The CPack WIX generator now supports
  "CPACK_WIX_ROOT_FEATURE_TITLE" and
  "CPACK_WIX_ROOT_FEATURE_DESCRIPTION" to allow the specification of a
  custom title and description for the root feature element.


Other
-----

* "cmake(1)" gained a "-E capabilities" option to provide a machine-
  readable (JSON) description of the capabilities of the cmake tool
  (available generators, etc.).

* A new "cmake-server(7)" mode was added to provide semantic
  information about a CMake-generated buildsystem to clients through a
  JSON protocol.  Currently all protocols are experimental and subject
  to change.

* The "cmake(1)" command learned a "--trace-source=<file>" option.

* "ccmake(1)" learned to support vim-like navigation bindings.

* "cmake-gui(1)" gained a button to open the generated project file
  for Visual Studio Generators and the "Xcode" generator.


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

* We no longer provide Linux i386 binaries for download from
  "cmake.org" for new versions of CMake.

* Vim support files "cmake-indent.vim", "cmake-syntax.vim", and
  "cmake-help.vim" have been removed in favor of the files now
  provided from the vim-cmake-syntax project.

* Support for building CMake itself with some compilers was dropped:

  * Visual Studio 7.1 and 2005 -- superseded by VS 2008 and above

  * MinGW.org mingw32 -- superseded by MSYS2 mingw32 and mingw64

  CMake still supports generating build systems for other projects
  using these compilers.


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

* The Fortran dependency scanner learned to support the syntax of
  Fortran Submodules.

* Vim support files "indent/cmake.vim" and "syntax/cmake.vim" from
  the vim-cmake-syntax project are now distributed with CMake.

----------------------------------------------------------------------------
Changes made since CMake 3.7.0-rc1:

Alex Turbov (3):
      CPackDeb: fix copy-n-paste typos in documentation
      CPackDeb: Fix incorrect variable name in documentation
      CPackRPM: Fix incorrect variable name in documentation

Alexis Murzeau (1):
      Ninja: Use binary dir for `$subdir/all` targets

Brad King (9):
      Android: Fix support for armeabi with c++_static
      Android: Add missing link flags for device executables
      Android: Set CMAKE_POSITION_INDEPENDENT_CODE automatically
      Android: Link position-independent executables with proper flags
      Intel: Fix compiler extension flags on Windows
      cmake-server: Change message wrapper to avoid ambiguity with content
      Features: Record features for Intel C++ 17 on UNIX
      FindHDF5: Restore pre-3.6 behavior of finding only C by default
      CMake 3.7.0-rc3

Francesco Romano (1):
      FindMatlab: Add support for Matlab 2016b (9.1)

Gregor Jasny (2):
      Revert "Xcode: Convert maybe unversioned OSX sysroot into versioned SDK path"
      Darwin: Remove deployment target version check

Konstantin Podsvirov (1):
      CPackIFW: Update search to find QtIFW distributed with QtSDK

Marcus D. Hanwell (1):
      Help: Update example Qt 5 find_package call to use COMPONENTS

Matthew Woehlke (1):
      FindMatlab: Fix typo in matlab_add_unit_test implementation

Thiago M. de C. Marques (1):
      Help: Update example Qt 5 find_package call to add missing component

Tobias Hunger (3):
      Help: Fix cmake-server documentation
      cmake-server: Better error reporting during handshake
      server-mode: Handle generator toolset and platform in handshake

Leave a Reply