CMake 3.15.0-rc3 is ready for testing

I am proud to announce the third CMake 3.15 release candidate.

Documentation is available at:

Release notes appear below and are also published at

Some of the more significant changes in CMake 3.15 are:

  • The “CMAKE_MSVC_RUNTIME_LIBRARY” variable and
    “MSVC_RUNTIME_LIBRARY” target property were introduced to select the
    runtime library used by compilers targeting the MSVC ABI. See policy
  • With MSVC-like compilers the value of “CMAKE__FLAGS” no
    longer contains warning flags like “/W3” by default. See policy
  • The “Clang” compiler variant on Windows that targets the MSVC ABI
    but has a GNU-like command line is now supported.
  • Preliminary support for the “Swift” language was added to the
    “Ninja” generator.
  • The “$<COMPILE_LANG_AND_ID:…>” generator expression was
    introduced to allow specification of compile options for target
    files based on the “CMAKE__COMPILER_ID” and “LANGUAGE” of each
    source file.
  • The “generator expressions” “C_COMPILER_ID”, “CXX_COMPILER_ID”,
    “COMPILE_LANG_AND_ID”, and “PLATFORM_ID” learned to support matching
    one value from a comma-separated list.
  • The “CMAKE_FIND_PACKAGE_PREFER_CONFIG” variable was added to tell
    “find_package()” calls to look for a package configuration file
    first even if a find module is available.
  • The “PUBLIC_HEADER” and “PRIVATE_HEADER” properties may now be set
    on Interface Libraries. The headers specified by those properties
    can be installed using the “install(TARGETS)” command by passing the
    “PUBLIC_HEADER” and “PRIVATE_HEADER” arguments respectively.
  • The “CMAKE_VS_JUST_MY_CODE_DEBUGGING” variable and
    “VS_JUST_MY_CODE_DEBUGGING” target property were added to enable the
    Just My Code feature of the Visual Studio Debugger when compiling
    with MSVC cl 19.05 and higher.
  • The “FindBoost” module was reworked to expose a more consistent
    user experience between its “Config” and “Module” modes and with
    other find modules in general.
  • The “message()” command learned new types: “NOTICE”, “VERBOSE”,
    “DEBUG” and “TRACE”.
  • The “export(PACKAGE)” command now does nothing unless enabled via

Questions or comments are always welcome!