CMake 3.16.0-rc2 is ready for testing
October 20, 2019
I am proud to announce the second CMake 3.16 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v16
Release notes appear below and are also published at
https://cmake.org/cmake/help/v16/release/16.html
Some of the more significant changes in CMake 16 are:
- CMake learned to support the Objective C (“OBJC”) and Objective
- C++ (“OBJCXX”) languages. They may be enabled via the “project()”
and “enable_language()” commands. When “OBJC” or “OBJCXX” is
enabled, source files with the “.m” or “.mm”, respectively, will be
compiled as Objective C or C++. Otherwise they will be treated as
plain C++ sources as they were before. - The “target_precompile_headers()” command was added to specify a
list of headers to precompile for faster compilation times. - The “UNITY_BUILD” target property was added to tell generators to
batch include source files for faster compilation times. - The “find_file()”, “find_library()”, “find_path()”,
“find_package()”, and “find_program()” commands have learned to
check the following variables to control searching - “CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH” – Controls the searching
the cmake-specific environment variables. - “CMAKE_FIND_USE_CMAKE_PATH” – Controls the searching the cmake-
specific cache variables. - “CMAKE_FIND_USE_CMAKE_SYSTEM_PATH” – Controls the searching
cmake platform specific variables. - “CMAKE_FIND_USE_PACKAGE_ROOT_PATH” – Controls the searching of
“_ROOT” variables. - “CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH” – Controls the
searching the standard system environment variables. - The “file()” command learned a new sub-command,
“GET_RUNTIME_DEPENDENCIES”, which allows you to recursively get the
list of libraries linked by an executable or library. This sub-
command is intended as a replacement for “GetPrerequisites”. - “ctest(1)” now has the ability to serialize tests based on
hardware requirements for each test. See Hardware Allocation for
details. - On AIX, executables using the “ENABLE_EXPORTS” target property now
produce a linker import file with a “.imp” extension in addition to
the executable file. Plugins (created via “add_library()” with the
“MODULE” option) that use “target_link_libraries()” to link to the
executable for its symbols are now linked using the import file. The
“install(TARGETS)” command now installs the import file as an
“ARCHIVE” artifact. - On AIX, runtime linking is no longer enabled by default. CMake
provides the linker enough information to resolve all symbols up
front. One may manually enable runtime linking for shared libraries
and/or loadable modules by adding “-Wl,-G” to their link flags (e.g.
in the “CMAKE_SHARED_LINKER_FLAGS” or “CMAKE_MODULE_LINKER_FLAGS”
variable). One may manually enable runtime linking for executables
by adding “-Wl,-brtl” to their link flags (e.g. in the
“CMAKE_EXE_LINKER_FLAGS” variable). - “cmake(1)” “-E” now supports “true” and “false” commands, which do
nothing while returning exit codes of 0 and 1, respectively. - “cmake(1)” gained a “–trace-redirect=” command line option
that can be used to redirect “–trace” output to a file instead of
“stderr”. - The “cmake(1)” “–loglevel” command line option has been renamed
to “–log-level” to make it consistent with the naming of other
command line options. The “–loglevel” option is still supported to
preserve backward compatibility. - The “CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY” variable has been
deprecated. Use the “CMAKE_FIND_USE_PACKAGE_REGISTRY” variable
instead. - The “GetPrerequisites” module has been deprecated, as it has been
superceded by “file(GET_RUNTIME_DEPENDENCIES)”.
Changes made since CMake 3.15 include the following. New Features ============ Languages --------- * CMake learned to support the Objective C ("OBJC") and Objective C++ ("OBJCXX") languages. They may be enabled via the "project()" and "enable_language()" commands. When "OBJC" or "OBJCXX" is enabled, source files with the ".m" or ".mm", respectively, will be compiled as Objective C or C++. Otherwise they will be treated as plain C++ sources as they were before. Compilers --------- * The "Clang" compiler is now supported on "Solaris". Platforms --------- * On AIX, executables using the "ENABLE_EXPORTS" target property now produce a linker import file with a ".imp" extension in addition to the executable file. Plugins (created via "add_library()" with the "MODULE" option) that use "target_link_libraries()" to link to the executable for its symbols are now linked using the import file. The "install(TARGETS)" command now installs the import file as an "ARCHIVE" artifact. * On AIX, runtime linking is no longer enabled by default. CMake provides the linker enough information to resolve all symbols up front. One may manually enable runtime linking for shared libraries and/or loadable modules by adding "-Wl,-G" to their link flags (e.g. in the "CMAKE_SHARED_LINKER_FLAGS" or "CMAKE_MODULE_LINKER_FLAGS" variable). One may manually enable runtime linking for executables by adding "-Wl,-brtl" to their link flags (e.g. in the "CMAKE_EXE_LINKER_FLAGS" variable). Command-Line ------------ * "cmake(1)" "-E" now supports "true" and "false" commands, which do nothing while returning exit codes of 0 and 1, respectively. * "cmake(1)" gained a "--trace-redirect=" command line option that can be used to redirect "--trace" output to a file instead of "stderr". * The "cmake(1)" "--loglevel" command line option has been renamed to "--log-level" to make it consistent with the naming of other command line options. The "--loglevel" option is still supported to preserve backward compatibility. Commands -------- * The "add_test()" command learned the option "COMMAND_EXPAND_LISTS" which causes lists in the "COMMAND" argument to be expanded, including lists created by generator expressions. * The "file()" command learned a new sub-command, "GET_RUNTIME_DEPENDENCIES", which allows you to recursively get the list of libraries linked by an executable or library. This sub- command is intended as a replacement for "GetPrerequisites". * The "find_file()", "find_library()", "find_path()", "find_package()", and "find_program()" commands have learned to check the following variables to control searching * "CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH" - Controls the searching the cmake-specific environment variables. * "CMAKE_FIND_USE_CMAKE_PATH" - Controls the searching the cmake- specific cache variables. * "CMAKE_FIND_USE_CMAKE_SYSTEM_PATH" - Controls the searching cmake platform specific variables. * "CMAKE_FIND_USE_PACKAGE_ROOT_PATH" - Controls the searching of "_ROOT" variables. * "CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH" - Controls the searching the standard system environment variables. * The "find_package()" command has learned to check the following variables to control searching * "CMAKE_FIND_USE_PACKAGE_REGISTRY" - Controls the searching the cmake user registry. * The "message()" command learned indentation control with the new "CMAKE_MESSAGE_INDENT" variable. * The "target_precompile_headers()" command was added to specify a list of headers to precompile for faster compilation times. Variables --------- * The "CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS" variable has been introduced to optionally initialize the "CUDA_RESOLVE_DEVICE_SYMBOLS" target property. * The "CMAKE_ECLIPSE_RESOURCE_ENCODING" variable was added to specify the resource encoding for the the "Eclipse CDT4" extra generator. Properties ---------- * The "BUILD_RPATH" and "INSTALL_RPATH" target properties now support "generator expressions". * The "INSTALL_REMOVE_ENVIRONMENT_RPATH" target property was added to remove compiler-defined "RPATH" entries from a target. This property is initialized by the "CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH" variable. * The "PRECOMPILE_HEADERS" target property was added to specify a list of headers to precompile for faster compilation times. Set it using the "target_precompile_headers()" command. * The "UNITY_BUILD" target property was added to tell generators to batch include source files for faster compilation times. * The "VS_CONFIGURATION_TYPE" target property now supports "generator expressions". * The "VS_DPI_AWARE" target property was added to tell Visual Studio Generators to set the "EnableDpiAwareness" property in ".vcxproj" files. * The "XCODE_SCHEME_DEBUG_DOCUMENT_VERSIONING" target property was added to tell the "Xcode" generator to set the value of the "Allow debugging when using document Versions Browser" schema option. Modules ------- * The "FindDoxygen" module "doxygen_add_docs()" command gained a new "USE_STAMP_FILE" option. When this option present, the custom target created by the command will only re-run Doxygen if any of the source files have changed since the last successful run. * The "FindGnuTLS" module now provides an imported target. * The "FindPackageHandleStandardArgs" module "find_package_handle_standard_args()" command gained a new "REASON_FAILURE_MESSAGE" option to specify a message giving the reason for the failure. * The "FindPkgConfig" module "pkg_search_module()" macro now defines a "_MODULE_NAME" result variable containing the first matching module name. * The "FindPython3" and "FindPython" modules gained options to control which "ABIs" will be searched. * The "FindPython3", "FindPython2", and "FindPython" modules now support direct specification of artifacts via cache entries. Autogen ------- * When using "AUTOMOC", CMake now generates the "-p" path prefix option for "moc". This ensures that "moc" output files are identical on different build setups (given, that the headers compiled by "moc" are in an "include directory"). Also it ensures that "moc" output files will compile correctly when the source and/or build directory is a symbolic link. The "moc" path prefix generation behavior can be configured by setting the new "CMAKE_AUTOMOC_PATH_PREFIX" variable and/or "AUTOMOC_PATH_PREFIX" target property. CTest ----- * "ctest(1)" now has the ability to serialize tests based on hardware requirements for each test. See Hardware Allocation for details. * A new test property, "SKIP_REGULAR_EXPRESSION", has been added. This property is similar to "FAIL_REGULAR_EXPRESSION" and "PASS_REGULAR_EXPRESSION", but with the same meaning as "SKIP_RETURN_CODE". This is useful, for example, in cases where the user has no control over the return code of the test. For example, in Catch2, the return value is the number of assertion failed, therefore it is impossible to use it for "SKIP_RETURN_CODE". CPack ----- * CPack variable "CPACK_INSTALL_CMAKE_CONFIGURATIONS" was added to control what configurations are to be packaged for multi- configuration CMake generators. * The "CPack DEB Generator" is now able to format generic text (usually used as the description for multiple CPack generators) according to the Debian Policy Manual. See the "CPACK_PACKAGE_DESCRIPTION_FILE" and "CPACK_DEBIAN__DESCRIPTION" variables. * The "CPack Archive Generator" learned to generate ".tar.zst" packages with Zstandard compression. Deprecated and Removed Features =============================== * An explicit deprecation diagnostic was added for policy "CMP0067" ("CMP0066" 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 "CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" variable has been deprecated. Use the "CMAKE_FIND_USE_PACKAGE_REGISTRY" variable instead. * The "GetPrerequisites" module has been deprecated, as it has been superceded by "file(GET_RUNTIME_DEPENDENCIES)". * The "CPACK_INSTALL_SCRIPT" variable has been deprecated in favor of the new, more accurately named "CPACK_INSTALL_SCRIPTS" variable. Other Changes ============= * The "cmake(1)" "-C " option now evaluates the initial cache script with "CMAKE_SOURCE_DIR" and "CMAKE_BINARY_DIR" set to the top-level source and build trees. * The "cmake(1)" "-E remove_directory" command-line tool, when given the path to a symlink to a directory, now removes just the symlink. It no longer removes content of the linked directory. * The "ctest(1)" "--build-makeprogram" command-line option now specifies the make program used when configuring a project with the "Ninja" generator or the Makefile Generators. * The "ExternalProject" module "ExternalProject_Add()" command has been updated so that "GIT_SUBMODULES """ initializes no submodules. See policy "CMP0097". * The "FindGTest" module has been updated to recognize MSVC build trees generated by GTest 1.8.1. * The "project()" command no longer strips leading zeros in version components. See policy "CMP0096". * The Qt Compressed Help file is now named "CMake.qch", which no longer contains the release version in the file name. When CMake is upgraded in-place, the name and location of this file will remain constant. Tools such as IDEs, help viewers, etc. should now be able to refer to this file at a fixed location that remains valid across CMake upgrades. * "RPATH" entries are properly escaped in the generated CMake scripts used for installation. See policy "CMP0095". * When using "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS" on Windows the auto- generated exports are now updated only when the object files providing the symbols are updated. ---------------------------------------------------------------------------- Changes made since CMake 3.16.0-rc1: Ben Boeckel (2): FindPostgreSQL: support version 12 FindPostgreSQL: support macports installation scheme Brad King (17): Intel: Fix default C++ dialect detection on Windows Tests: Update CompileFeatures test for Intel 19 with VS 2015 Help: Document CMAKE_UNITY_BUILD in 3.16 release notes Help: Improve UNITY_BUILD documentation formatting Help: Extend documentation of CMAKE_UNITY_BUILD variable Help: Document CMAKE_UNITY_BUILD/CMAKE_EXPORT_COMPILE_COMMANDS limitation VS: Add toolset v142 CSharp flag table IRSL: Prefer MSVC runtime libraries from newest toolset first IRSL: Install vcruntime140_1.dll if available CMakeVersion: Prefer Git information provided by 'git archive' exports Help: Clarify documentation of CMAKE_STATIC_LINKER_FLAGS CMakeFindBinUtils: Remove unnecessary variable unset calls PCH: Document and test COMPILE_LANGUAGE genex for per-language header install,export: Do not treat language names as target names cmMakefileTargetGenerator: Inline WriteObjectBuildFile in only call site PCH: Fix Makefile dependencies to rebuild PCH on header changes CMake 3.16.0-rc2 Cristian Adam (1): Objective-C: Do not treat Objective-C files as C++ files Konstantin Pyzhov (1): FindOpenMP: Add support for HIP clang device pass Kyle Edwards (1): CMakeVersion: Add option to disable Git suffix Manuel Herrmann (1): FindCurses: use tinfow when wide support is requested Micael Borgefeldt (2): IAR: Fix v850 assembler support file extensions IAR: Add 8051 support Peter Waller (1): cmake: Fix relative path regression in -C Saleem Abdulrasool (1): try_compile: support Swift for cross-compilation Tom Lankhorst (1): Help: Fix typos and style in add_link_options documentation Willem Deconinck (2): FindHDF5: Cray HDF5 Fortran module filename is usually capitalized FindHDF5: Append hdf5 to hdf5_hl to avoid undefined references