CMake 3.12.0 available for download
July 17, 2018
I am happy to announce that CMake 3.12.0 is now available for download at:
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v3.12
Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.12/release/3.12.html
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-
feature. - 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
tool. - The “add_compile_definitions()” command was added to set
preprocessor definitions at directory level. This supersedes
“add_definitions()”. - 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
“CMP0074”. - 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
expressions. - A new “$<TARGET_EXISTS:…>” “generator expression” has been
added. - 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.
CMake 3.12 Release Notes ************************ Changes made since CMake 3.11 include the following. New Features ============ Generators ---------- * 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. Command-Line ------------ * The "cmake(1)" Build Tool Mode ("cmake --build") gained "-- parallel []" and "-j []" options to specify a parallel build level. They map to corresponding options of the native build tool. Commands -------- * The "add_compile_definitions()" command was added to set preprocessor definitions at directory level. This supersedes "add_definitions()". * The "cmake_minimum_required()" and "cmake_policy(VERSION)" commands now accept a version range using the form "[...]". The "" version is required but policies are set based on the "" version. This allows projects to specify a range of versions for which they have been updated and avoid explicit policy settings. * 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 "file(TOUCH)" and "file(TOUCH_NOCREATE)" commands were added to expose "TOUCH" functionality without having to use CMake's command- line tool mode with "execute_process()". * 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 "CMP0074". * The "install()" command learned an optional "NAMELINK_COMPONENT" parameter, which allows you to change the component for a shared library's namelink. If none is specified, the value of "COMPONENT" is used by default. * The "list()" command learned a "JOIN" sub-command to concatenate list's elements separated by a glue string. * The "list()" command learned a "SUBLIST" sub-command to get a sublist of the list. * The "list()" command learned a "TRANSFORM" sub-command to apply various string transformation to list's elements. * The "project()" command learned an optional "HOMEPAGE_URL" parameter which has the effect of setting variables like "PROJECT_HOMEPAGE_URL", "_HOMEPAGE_URL" and "CMAKE_PROJECT_HOMEPAGE_URL". * The "string()" command learned a "JOIN" sub-command to concatenate input strings separated by a glue string. * "target_compile_options()" and "add_compile_options()" commands gained a "SHELL:" prefix to specify a group of related options using shell-like quoting. * 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. Variables --------- * The "CMAKE_FOLDER" variable was added to initialize the "FOLDER" property on all targets. * The "CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION" variable was defined to initialize all "DOTNET_TARGET_FRAMEWORK_VERSION" target properties. * "CMAKE_PROJECT_VERSION*" variables have been introduced: * "CMAKE_PROJECT_VERSION" * "CMAKE_PROJECT_VERSION_MAJOR" * "CMAKE_PROJECT_VERSION_MINOR" * "CMAKE_PROJECT_VERSION_PATCH" * "CMAKE_PROJECT_VERSION_TWEAK" * The "CMAKE_SUPPRESS_REGENERATION" variable was extended to support the "Ninja" and Makefile Generators. It is also now documented. * "CMAKE_VS_SDK_*_DIRECTORIES" variables were defined to tell Visual Studio Generators for VS 2010 and above how to populate fields in ".vcxproj" files that specify SDK directories. The variables are: * "CMAKE_VS_SDK_EXCLUDE_DIRECTORIES" * "CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES" * "CMAKE_VS_SDK_INCLUDE_DIRECTORIES" * "CMAKE_VS_SDK_LIBRARY_DIRECTORIES" * "CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES" * "CMAKE_VS_SDK_REFERENCE_DIRECTORIES" * "CMAKE_VS_SDK_SOURCE_DIRECTORIES" * A "MSVC_TOOLSET_VERSION" variable was added to provide the MSVC toolset version associated with the current MSVC compiler version in "MSVC_VERSION". Properties ---------- * The "COMMON_LANGUAGE_RUNTIME" target property was introduced to configure the use of managed C++ for Visual Studio Generators for VS 2010 and above. A corresponding "IMPORTED_COMMON_LANGUAGE_RUNTIME" target property was added to support "C++/CLI" for imported targets. * The "DOTNET_TARGET_FRAMEWORK_VERSION" target property was introduced as replacement for "VS_DOTNET_TARGET_FRAMEWORK_VERSION", which is considered deprecated now. * An "EXPORT_PROPERTIES" target property was added to specify a custom list of target properties to include in targets exported by the "install(EXPORT)" and "export()" commands. * The "PDB_OUTPUT_DIRECTORY" property learned to support "generator expressions". * A "TESTS" directory property was added to hold the list of tests defined by the "add_test()" command. * A "VS_DEBUGGER_COMMAND" target property was created to set the debugging command line with Visual Studio Generators for VS 2010 and above. * HLSL source file properties "VS_SHADER_DISABLE_OPTIMIZATIONS" and "VS_SHADER_ENABLE_DEBUG" gained support for generator expressions. * HLSL source file property "VS_SHADER_OBJECT_FILE_NAME" has been added to the Visual Studio Generators for VS 2010 and above. The property specifies the file name of the compiled shader object. Modules ------- * The "FindALSA" module now provides imported targets. * The "FindCURL" module now provides imported targets. * The "FindJPEG" module now provides imported targets. * The "FindLibXml2" module now provides imported targets. * The "FindMatlab" module now supports the Matlab Runtime Compiler (MCR) for compiling and linking matlab extensions. * A "FindODBC" module was added to find an Open Database Connectivity (ODBC) library. * The "FindPkgConfig" module has learned to export the found libraries with full path for direct consumption with the "target_link_libraries()" command. * New "FindPython3" and "FindPython2" modules, as well as a new "FindPython" module, have been added to provide a new way to locate python environments. * The "UseSWIG" module gained a whole refresh and is now more consistent with standard CMake commands to generate libraries and is fully configurable through properties. * The "UseSWIG" module learned to manage multiple behaviors through "UseSWIG_MODULE_VERSION" variable to ensure legacy support as well as more robust handling of "SWIG" advanced features (like "%template"). * The "UseSWIG" module learned to support CSHARP variant wrapper files. * The "WriteCompilerDetectionHeader" module gained a "BARE_FEATURES" option to add a compatibility define for the exact keyword of a new language feature. Generator Expressions --------------------- * 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 expressions. * A new "$<IN_LIST:...>" "generator expression" has been added. * A new "$<TARGET_EXISTS:...>" "generator expression" has been added. * A new "$<TARGET_NAME_IF_EXISTS:...>" "generator expression" has been added. CTest ----- * The "ctest_start()" command has been reworked so that you can simply call "ctest_start(APPEND)" and it will read all the needed information from the TAG file. The argument parsing has also been relaxed so that the order of the arguments is less significant. * A "PROCESSOR_AFFINITY" test property was added to request that CTest run a test with CPU affinity for a set of processors disjoint from other concurrently running tests with the property set. CPack ----- * The "CPack" module now uses variables "CMAKE_PROJECT_VERSION_MAJOR", "CMAKE_PROJECT_VERSION_MINOR" and "CMAKE_PROJECT_VERSION_PATCH" to initialize corresponding CPack variables. * "cpack(1)" gained basic support for NuGet. See the "CPackNuGet" module. Other ----- * The "Compile Features" functionality is now aware of C++ 20. No specific features are yet enumerated besides the "cxx_std_20" meta- feature. * The "Compile Features" functionality is now aware of the availability of C features in MSVC since VS 2010. * The "Compile Features" functionality is now aware of C language standards supported by Texas Instruments C compilers. Deprecated and Removed Features =============================== * The "Visual Studio 8 2005" generator has been removed. * CMake no longer produces "_LIB_DEPENDS" cache entries for library targets. See policy "CMP0073". Other Changes ============= * Include flags for directories marked as "SYSTEM" are now moved after non-system directories. The "-isystem" flag does this automatically, so moving them explicitly to the end makes the behavior consistent on compilers that do not have any "-isystem" flag. * Fortran dependency scanning now supports dependencies implied by Fortran Submodules. * The existence and functionality of the file "${CMAKE_BINARY_DIR}/cmake_install.cmake" has now been documented in the "install()" documentation so that external packaging software can take advantage of CPack-style component installs. * The "CheckIncludeFile" module "check_include_file" macro learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable. See policy "CMP0075". * The "CheckIncludeFileCXX" module "check_include_file_cxx" macro learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable. See policy "CMP0075". * The "CheckIncludeFiles" module "check_include_files" macro learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable. See policy "CMP0075". * The "cmake(1)" "-E copy_directory" tool now fails when the source directory does not exist. Previously it succeeded by creating an empty destination directory. * The "UseSWIG" module "swig_add_library()" command (and legacy "swig_add_module" command) now set the prefix of Java modules to """" for MINGW, MSYS, and CYGWIN environments. ---------------------------------------------------------------------------- Changes made since CMake 3.12.0-rc3: Brad King (2): Help: Mention IMPORTED_OBJECTS in add_library docs CMake 3.12.0 Christian Pfeiffer (1): Intel: Fix incorrectly documented extension flags Cristian Adam (1): QNX: Fix autogen compiler predefines detection Robert Maynard (1): Help: Add OBJECT_LIBRARY to TYPE target property documentation Roger Leigh (2): FindBoost: Add support for Boost 1.68 beta1 FindBoost: Change context header used
Looks like the Generator Expressions section needs some escaping…
Thanks for spotting the issues. I think I have fixed them all.