CMake 3.9.0-rc1 is now ready!

I am proud to announce the first CMake 3.9 release candidate.

Documentation is available at:

Release notes appear below and are also published at

Some of the more significant changes in CMake 3.9 are:

  • The “add_library()” command “IMPORTED” option learned to support
    Object Libraries.
  • All “find_” commands now have a “PACKAGE_ROOT” search path group
    that is first in the search heuristics. If a “find_” command is
    called from inside a find module, then the CMake variable and
    environment variable named “_ROOT” are used as prefixes
    and are the first set of paths to be searched.
  • The “install(TARGETS)” command learned a new “OBJECTS” option to
    specify where to install Object Libraries.
  • The “install(EXPORT)” command learned how to export Object
  • A “BUILD_WITH_INSTALL_NAME_DIR” target property and corresponding
    “CMAKE_BUILD_WITH_INSTALL_NAME_DIR” variable were added to control
    whether to use the “INSTALL_NAME_DIR” target property value for
    binaries in the build tree. This is for macOS “install_name” as
  • A “CUDA_PTX_COMPILATION” target property was added to Object
    Libraries to support compiling to “.ptx” files instead of host
    object files.
  • A new “GoogleTest” module was added to provide the
    “gtest_add_tests()” function independently of the “FindGTest”
    module. The function was also updated to support keyword arguments,
    with functionality expanded to allow a test name prefix and suffix
    to be specified, the dependency on the source files to be optional
    and the list of discovered test cases to be returned to the caller.
  • The “Ninja” generator has loosened the dependencies of object
    compilation. Object compilation now depends only on custom targets
    and custom commands associated with libraries on which the object’s
    target depends and no longer depends on the libraries themselves.
    Source files in dependent targets may now compile without waiting
    for their targets’ dependencies to link.
  • Interprocedural optimization (IPO) is now supported for GNU and
    Clang compilers using link time optimization (LTO) flags. See the
    “INTERPROCEDURAL_OPTIMIZATION” target property and
    “CheckIPOSupported” module.
  • The “TARGET_OBJECTS” “generator expression” is now supported by
    the “add_custom_command()” and “file(GENERATE)” commands.



Questions or comments are always welcome!