CMake 3.12.0 available for download

I am happy to announce that CMake 3.12.0 is now available for download at:

Documentation is available at:

Release notes appear below and are also published at

Some of the more significant changes in CMake 3.12 are:

  • The “target_link_libraries()” command now supports Object
    Libraries. Linking to an object library uses its object files in
    direct dependents and also propagates usage requirements.
  • The “file(GLOB)” and “file(GLOB_RECURSE)” commands learned a new
    flag “CONFIGURE_DEPENDS” which enables expression of build system
    dependency on globbed directory’s contents.
  • The “Compile Features” functionality is now aware of C++ 20. No
    specific features are yet enumerated besides the “cxx_std_20” meta-
  • The Visual Studio Generators for VS 2017 learned to support a
    “version=14.##” option in the “CMAKE_GENERATOR_TOOLSET” value (e.g.
    via the “cmake(1)” “-T” option) to specify a toolset version number.
  • The “cmake(1)” Build Tool Mode (“cmake –build”) gained “–
    parallel [<jobs>]” and “-j [<jobs>]” options to specify a parallel
    build level. They map to corresponding options of the native build
  • The “add_compile_definitions()” command was added to set
    preprocessor definitions at directory level. This supersedes
  • The “cmake_minimum_required()” and “cmake_policy(VERSION)”
    commands now accept a version range using the form
    “<min>[…<max>]”. The “<min>” version is required but policies are
    set based on the “<max>” version. This allows projects to specify a
    range of versions for which they have been updated and avoid
    explicit policy settings.
  • The “find_package()” command now searches a prefix specified by a
    “PackageName_ROOT” CMake or environment variable. Package roots are
    maintained as a stack so nested calls to all “find_*” commands
    inside find modules also search the roots as prefixes. See policy
  • A new “$<GENEX_EVAL:…>” and “$<TARGET_GENEX_EVAL:target,…>”
    “generator expression” has been added to enable consumption of
    generator expressions whose evaluation results itself in generator
  • A new “$<TARGET_EXISTS:…>” “generator expression” has been
  • A new “$<TARGET_NAME_IF_EXISTS:…>” “generator expression” has
    been added.
  • The “FindCURL” module now provides imported targets.
  • The “FindJPEG” module now provides imported targets.
  • A “FindODBC” module was added to find an Open Database
    Connectivity (ODBC) library.
  • New “FindPython3” and “FindPython2” modules, as well as a new
    “FindPython” module, have been added to provide a new way to locate
    python environments.


2 Responses to CMake 3.12.0 available for download

  1. Taylor Braun-Jones says:

    Looks like the Generator Expressions section needs some escaping…

Questions or comments are always welcome!