[CMake] [ANNOUNCE] CMake 3.11.0-rc2 is now ready for testing
Robert Maynard
robert.maynard at kitware.com
Tue Feb 27 11:27:32 EST 2018
I am proud to announce the second CMake 3.11 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v3.11
Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.11/release/3.11.html
Some of the more significant changes in CMake 3.11 are:
* The Makefile Generators and the "Ninja" generator learned to add
compiler launcher tools along with the compiler for the "Fortran"
language ("C", "CXX", and "CUDA" were supported previously). See the
"CMAKE_<LANG>_COMPILER_LAUNCHER" variable and
"<LANG>_COMPILER_LAUNCHER" target property for details.
* Visual Studio Generators learned to support the "COMPILE_LANGUAGE"
"generator expression" in target-wide "COMPILE_DEFINITIONS",
"INCLUDE_DIRECTORIES", "COMPILE_OPTIONS", and "file(GENERATE)". See
generator expression documentation for caveats.
* The "Xcode" Generator learned to support the "COMPILE_LANGUAGE"
"generator expression" in target-wide "COMPILE_DEFINITIONS" and
"INCLUDE_DIRECTORIES". It previously supported only
"COMPILE_OPTIONS" and "file(GENERATE)". See generator expression
documentation for caveats.
* "add_library()" and "add_executable()" commands can now be called
without any sources and will not complain as long as sources are
added later via the "target_sources()" command.
* The "target_compile_definitions()" command learned to set the
"INTERFACE_COMPILE_DEFINITIONS" property on Imported Targets.
* The "target_compile_features()" command learned to set the
"INTERFACE_COMPILE_FEATURES" property on Imported Targets.
* The "target_compile_options()" command learned to set the
"INTERFACE_COMPILE_OPTIONS" property on Imported Targets.
* The "target_include_directories()" command learned to set the
"INTERFACE_INCLUDE_DIRECTORIES" property on Imported Targets.
* The "target_sources()" command learned to set the
"INTERFACE_SOURCES" property on Imported Targets.
* The "target_link_libraries()" command learned to set the
"INTERFACE_LINK_LIBRARIES" property on Imported Targets.
* The "COMPILE_DEFINITIONS" source file property learned to support
"generator expressions".
* A "COMPILE_OPTIONS" source file property was added to manage list
of options to pass to the compiler.
* When using "AUTOMOC" or "AUTOUIC", CMake now starts multiple
parallel "moc" or "uic" processes to reduce the build time. A new
"CMAKE_AUTOGEN_PARALLEL" variable and "AUTOGEN_PARALLEL" target
property may be set to specify the number of parallel "moc" or "uic"
processes to start. The default is derived from the number of CPUs
on the host.
CMake 3.11 Release Notes
************************
Changes made since CMake 3.10 include the following.
New Features
============
Platforms
---------
* TI C/C++ compilers are now supported by the "Ninja" generator.
Generators
----------
* The "CodeBlocks" extra generator learned to check a
"CMAKE_CODEBLOCKS_COMPILER_ID" variable for a custom compiler
identification value to place in the project file.
* The Makefile Generators and the "Ninja" generator learned to add
compiler launcher tools along with the compiler for the "Fortran"
language ("C", "CXX", and "CUDA" were supported previously). See the
"CMAKE_<LANG>_COMPILER_LAUNCHER" variable and
"<LANG>_COMPILER_LAUNCHER" target property for details.
* Visual Studio Generators learned to support the "COMPILE_LANGUAGE"
"generator expression" in target-wide "COMPILE_DEFINITIONS",
"INCLUDE_DIRECTORIES", "COMPILE_OPTIONS", and "file(GENERATE)". See
generator expression documentation for caveats.
* The "Xcode" generator learned to support the "COMPILE_LANGUAGE"
"generator expression" in target-wide "COMPILE_DEFINITIONS" and
"INCLUDE_DIRECTORIES". It previously supported only
"COMPILE_OPTIONS" and "file(GENERATE)". See generator expression
documentation for caveats.
Commands
--------
* "add_library()" and "add_executable()" commands can now be called
without any sources and will not complain as long as sources are
added later via the "target_sources()" command.
* The "file(DOWNLOAD)" and "file(UPLOAD)" commands gained "NETRC"
and "NETRC_FILE" options to specify use of a ".netrc" file.
* The "target_compile_definitions()" command learned to set the
"INTERFACE_COMPILE_DEFINITIONS" property on Imported Targets.
* The "target_compile_features()" command learned to set the
"INTERFACE_COMPILE_FEATURES" property on Imported Targets.
* The "target_compile_options()" command learned to set the
"INTERFACE_COMPILE_OPTIONS" property on Imported Targets.
* The "target_include_directories()" command learned to set the
"INTERFACE_INCLUDE_DIRECTORIES" property on Imported Targets.
* The "target_sources()" command learned to set the
"INTERFACE_SOURCES" property on Imported Targets.
* The "target_link_libraries()" command learned to set the
"INTERFACE_LINK_LIBRARIES" property on Imported Targets.
Variables
---------
* A "CMAKE_GENERATOR_INSTANCE" variable was introduced to hold the
selected instance of the generator's corresponding native tools if
multiple are available. This is used by the "Visual Studio 15 2017"
generator to hold the selected instance of Visual Studio
persistently.
* A "CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS" variable was added
to enable setting of default permissions for directories created
implicitly during installation of files by "install()" and
"file(INSTALL)", e.g. during "make install".
* A "CMAKE_JOB_POOLS" variable was added specify a value to use for
the "JOB_POOLS" property. This enables control over build
parallelism with command line configuration parameters when using
the Ninja generator.
* The "CMAKE_NETRC" and "CMAKE_NETRC_FILE" variables were added to
specify use of a ".netrc" file by the "file(DOWNLOAD)" and
"file(UPLOAD)" commands and the "ExternalProject" module.
* A "CMAKE_CUDA_SEPARABLE_COMPILATION" variable was added to
initialize the "CUDA_SEPARABLE_COMPILATION" target property on
targets when they are created.
Properties
----------
* The "COMPILE_DEFINITIONS" source file property learned to support
"generator expressions".
* A "COMPILE_OPTIONS" source file property was added to manage list
of options to pass to the compiler.
* An "IMPORTED_GLOBAL" target property was added to indicate whether
an IMPORTED target is globally visible. It is automatically set to a
true value for targets created with the "GLOBAL" option to
"add_library()" or "add_executable()". Additionally, project code
may now *promote* a local imported target to be globally visible by
setting this property to "TRUE".
* An "INCLUDE_DIRECTORIES" source file property was added to specify
list of preprocessor include file search directories.
* Source file properties "VS_SHADER_DISABLE_OPTIMIZATIONS" and
"VS_SHADER_ENABLE_DEBUG" have been added to specify more details of
".hlsl" sources with Visual Studio Generators.
Modules
-------
* The "CheckIncludeFile" module "check_include_file" macro learned
to honor the "CMAKE_REQUIRED_LIBRARIES" variable.
* The "CheckIncludeFileCXX" module "check_include_file_cxx" macro
learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable.
* The "CheckIncludeFiles" module "check_include_files" macro learned
to honor the "CMAKE_REQUIRED_LIBRARIES" variable.
* The "CheckIncludeFiles" module "CHECK_INCLUDE_FILES()" command
gained a "LANGUAGE" option to specify whether to check using the "C"
or "CXX" compiler.
* The "CMakePackageConfigHelpers" module
"write_basic_package_version_file()" command learned a new
"SameMinorVersion" mode for the "COMPATIBILITY" argument.
* The "ExternalProject" module learned to substitute
"<DOWNLOAD_DIR>" in comments, commands, working directory and
byproducts.
* The "ExternalProject" module gained "NETRC" and "NETRC_FILE"
options to specify use of a ".netrc" file.
* A new "FetchContent" module was added which supports populating
content at configure time using any of the download/update methods
supported by "ExternalProject_Add()". This allows the content to be
used immediately during the configure stage, such as with
"add_subdirectory()", etc. Hierarchical project structures are well
supported, allowing parent projects to override the content details
of child projects and ensuring content is not populated multiple
times throughout the whole project tree.
* The "FindBLAS" and "FindLAPACK" modules learned to support FLAME
"blis" and "libflame".
* The "FindDoxygen" module "doxygen_add_docs()" function now
supports a new "DOXYGEN_VERBATIM_VARS" list variable. Any
"DOXYGEN_..." variable contained in that list will bypass the
automatic quoting logic, leaving its contents untouched when
transferring them to the output "Doxyfile".
* A "FindIconv" module was added to locate iconv support.
* The "GenerateExportHeader" module "GENERATE_EXPORT_HEADER" command
gained an "INCLUDE_GUARD_NAME" option to change the name of the
include guard symbol written to the generated export header.
Additionally, it now adds a comment after the closing "#endif" on
the generated export header's include guard.
* The "UseJava" module "add_jar" command gained a
"GENERATE_NATIVE_HEADERS" option to generate native header files
using "javac -h" for "javac" 1.8 or above. This supersedes
"create_javah", which no longer works with JDK 1.10 and above due to
removal of the "javah" tool by JEP 313.
Autogen
-------
* When using "AUTOMOC" or "AUTOUIC", CMake now starts multiple
parallel "moc" or "uic" processes to reduce the build time. A new
"CMAKE_AUTOGEN_PARALLEL" variable and "AUTOGEN_PARALLEL" target
property may be set to specify the number of parallel "moc" or "uic"
processes to start. The default is derived from the number of CPUs
on the host.
CTest
-----
* The "ctest_start()" command no longer sets
"CTEST_RUN_CURRENT_SCRIPT" due to issues with scoping if it is
called from inside a function. Instead, it sets an internal variable
in CTest. However, setting "CTEST_RUN_CURRENT_SCRIPT" to 0 at the
global scope still prevents the script from being re-run at the end.
CPack
-----
* "cpack(1)" gained "--trace" and "--trace-expand" options.
* The "CPackIFW" module gained new
"CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR" variable to control if the
target directory should not be deleted when uninstalling.
* The "CPackRPM" module learned to enable enforcing of execute
privileges on programs and shared libraries. See
"CPACK_RPM_INSTALL_WITH_EXEC" variable.
* A "CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS" variable was added
which serves the same purpose during packaging (e.g. "make package")
as the "CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS" variable serves
during installation (e.g. "make install").
Other
-----
* Alias Targets may now alias Imported Targets that are created with
the "GLOBAL" option to "add_library()".
* Interface Libraries may now have custom properties set on them if
they start with either an underscore ("_") or a lowercase ASCII
character. The original intention was to only allow properties which
made sense for "INTERFACE" libraries, but it also blocked usage of
custom properties.
* The "cmake(1)" "--open <dir>" command-line option was added to
open generated IDE projects like Visual Studio solutions or Xcode
projects.
Deprecated and Removed Features
===============================
* An explicit deprecation diagnostic was added for policies
"CMP0037" through "CMP0054" ("CMP0036" 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 "KDevelop3" generator has been removed.
Other Changes
=============
* Policy "CMP0037" no longer reserves target names associated with
optional features, such as "test" and "package", unless the
corresponding feature is enabled.
* The "FindOpenGL" module now prefers GLVND libraries if available.
See policy "CMP0072".
* The minimum deployment target set in the
"CMAKE_OSX_DEPLOYMENT_TARGET" variable used to be only applied for
macOS regardless of the selected SDK. It is now properly set for
the target platform selected by "CMAKE_OSX_SYSROOT". For example, if
the sysroot variable specifies an iOS SDK then the value in
"CMAKE_OSX_DEPLOYMENT_TARGET" is interpreted as minimum iOS version.
* The "Xcode" generator behavior of generating one project file per
"project()" command may now be controlled with the
"CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY" variable. This could
be useful to speed up the CMake generation step for large projects
and to work-around a bug in the "ZERO_CHECK" logic.
* Since the "CMakeCache.txt" format does not support newlines in
values, values containing newlines are now truncated before writing
to the file. In addition, a warning comment is written to the cache
file, and a warning message is displayed to the user on the console.
----------------------------------------------------------------------------
Changes made since CMake 3.11.0-rc1:
Bernhard M. Wiedemann (1):
Tests: Fix TIMESTAMP-UnixTime test under SOURCE_DATE_EPOCH=1
Brad King (4):
Tests: Make CompileFeatures C dialect check consistent with impl
CMakeLib: Link to system thread libraries to support std::thread
Modules: Restore recently removed search path suffixes
CMake 3.11.0-rc2
Gregor Jasny (1):
Xcode: Generate ZERO_CHECK generator target only once
Grzegorz Dobinski (1):
Compiler/TI: Fix depfile generation for C++
Sebastian Holtermann (2):
Autogen: Doc: Extend AUTOGEN_TARGET_DEPENDS documentation
Autogen: Doc: Extend AUTOMOC_DEPEND_FILTERS documentation
Shane Parris (1):
Help: Fix command references in CMAKE_NETRC* variable documentation
More information about the CMake
mailing list