CMake 3.11 Release Notes

Changes made since CMake 3.10 include the following.

New Features


  • TI C/C++ compilers are now supported by the Ninja generator.






  • The CheckIncludeFiles module CHECK_INCLUDE_FILES() command gained a LANGUAGE option to specify whether to check using the C or CXX compiler.
  • The CMakePackageConfigHelpers module write_basic_package_version_file() command learned a new SameMinorVersion mode for the COMPATIBILITY argument.
  • The ExternalProject module learned to substitute <DOWNLOAD_DIR> in comments, commands, working directory and byproducts.
  • The ExternalProject module gained NETRC and NETRC_FILE options to specify use of a .netrc file.
  • A new FetchContent module was added which supports populating content at configure time using any of the download/update methods supported by ExternalProject_Add(). This allows the content to be used immediately during the configure stage, such as with add_subdirectory(), etc. Hierarchical project structures are well supported, allowing parent projects to override the content details of child projects and ensuring content is not populated multiple times throughout the whole project tree.
  • The FindBLAS and FindLAPACK modules learned to support FLAME blis and libflame.
  • The FindDoxygen module doxygen_add_docs() function now supports a new DOXYGEN_VERBATIM_VARS list variable. Any DOXYGEN_... variable contained in that list will bypass the automatic quoting logic, leaving its contents untouched when transferring them to the output Doxyfile.
  • A FindIconv module was added to locate iconv support.
  • The GenerateExportHeader module GENERATE_EXPORT_HEADER command gained an INCLUDE_GUARD_NAME option to change the name of the include guard symbol written to the generated export header. Additionally, it now adds a comment after the closing #endif on the generated export header’s include guard.
  • The UseJava module add_jar command gained a GENERATE_NATIVE_HEADERS option to generate native header files using javac -h for javac 1.8 or above. This supersedes create_javah, which no longer works with JDK 1.10 and above due to removal of the javah tool by JEP 313.


  • When using AUTOMOC or AUTOUIC, CMake now starts multiple parallel moc or uic processes to reduce the build time. A new CMAKE_AUTOGEN_PARALLEL variable and AUTOGEN_PARALLEL target property may be set to specify the number of parallel moc or uic processes to start. The default is derived from the number of CPUs on the host.


  • The ctest_start() command no longer sets CTEST_RUN_CURRENT_SCRIPT due to issues with scoping if it is called from inside a function. Instead, it sets an internal variable in CTest. However, setting CTEST_RUN_CURRENT_SCRIPT to 0 at the global scope still prevents the script from being re-run at the end.



  • Alias Targets may now alias Imported Targets that are created with the GLOBAL option to add_library().
  • Interface Libraries may now have custom properties set on them if they start with either an underscore (_) or a lowercase ASCII character. The original intention was to only allow properties which made sense for INTERFACE libraries, but it also blocked usage of custom properties.
  • The cmake(1) --open <dir> command-line option was added to open generated IDE projects like Visual Studio solutions or Xcode projects.

Deprecated and Removed Features

  • An explicit deprecation diagnostic was added for policies CMP0037 through CMP0054 (CMP0036 and below were already deprecated). The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that projects should port to the NEW behaviors.
  • The KDevelop3 generator has been removed.

Other Changes

  • Policy CMP0037 no longer reserves target names associated with optional features, such as test and package, unless the corresponding feature is enabled.
  • The FindOpenGL module now prefers GLVND libraries if available. See policy CMP0072.
  • The minimum deployment target set in the CMAKE_OSX_DEPLOYMENT_TARGET variable used to be only applied for macOS regardless of the selected SDK. It is now properly set for the target platform selected by CMAKE_OSX_SYSROOT. For example, if the sysroot variable specifies an iOS SDK then the value in CMAKE_OSX_DEPLOYMENT_TARGET is interpreted as minimum iOS version.
  • The Xcode generator behavior of generating one project file per project() command may now be controlled with the CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY variable. This could be useful to speed up the CMake generation step for large projects and to work-around a bug in the ZERO_CHECK logic.
  • Since the CMakeCache.txt format does not support newlines in values, values containing newlines are now truncated before writing to the file. In addition, a warning comment is written to the cache file, and a warning message is displayed to the user on the console.


Changes made since CMake 3.11.0 include the following.


  • The CheckIncludeFile module check_include_file macro, CheckIncludeFileCXX module check_include_file_cxx macro, and CheckIncludeFiles module check_include_files macro were taught to honor the CMAKE_REQUIRED_LIBRARIES variable in CMake 3.11.0. This has been reverted due to changing behavior of checks for existing projects. It may be restored in the future with a policy for compatibility.