CMake 3.7 Release Notes

Changes made since CMake 3.6 include the following.

New Features



  • 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 2017 generator was added. This is experimental and based on "Visual Studio 2017 RC" 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.


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



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


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




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

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