New upstream version 3.11.1

ci/unstable
Felix Geyer 7 years ago
parent 48e3d230b8
commit 31de23a867

@ -96,7 +96,7 @@ _cmake()
_filedir
return
;;
--build)
--build|--open)
_filedir -d
return
;;

@ -352,7 +352,7 @@ and store the result as a list in LISTVAR."
;;;###autoload
(defun cmake-help ()
"Queries for any of the four available help topics and prints out the approriate page."
"Queries for any of the four available help topics and prints out the appropriate page."
(interactive)
(let* ((default-entry (cmake-symbol-at-point))
(command-list (cmake-get-list "command"))

@ -1,4 +1,3 @@
" vim: set nowrap:
" Vim syntax file
" Program: CMake - Cross-Platform Makefile Generator
" Version: @VERSION@
@ -8,6 +7,7 @@
" Patrick Boettcher <patrick.boettcher@posteo.de>
" Maintainer: Dimitri Merejkowsky <d.merej@gmail.com>
" Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
" Last Change: @DATE@
"
" Licence: The CMake license applies to this file. See
" https://cmake.org/licensing
@ -100,4 +100,4 @@ let b:current_syntax = "cmake"
let &cpo = s:keepcpo
unlet s:keepcpo
"EOF"
" vim: set nowrap:

@ -2,6 +2,7 @@
use strict;
use warnings;
use POSIX qw(strftime);
#my $cmake = "/home/pboettch/devel/upstream/cmake/build/bin/cmake";
my $cmake = "cmake";
@ -129,6 +130,10 @@ while(<IN>)
} elsif ($1 eq "VERSION") {
$_ =~ s/\@VERSION\@/$version/;
print OUT $_;
} elsif ($1 eq "DATE") {
my $date = strftime "%Y %b %d", localtime;
$_ =~ s/\@DATE\@/$date/;
print OUT $_;
} else {
print "ERROR do not know how to replace $1\n";
}

@ -1,9 +1,9 @@
" Vim indent file
" Language: CMake (ft=cmake)
" Author: Andy Cedilnik <andy.cedilnik@kitware.com>
" Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
" Last Change: $Date$
" Version: $Revision$
" Maintainer: Dimitri Merejkowsky <d.merej@gmail.com>
" Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
" Last Change: 2017 Aug 30
"
" Licence: The CMake license applies to this file. See
" https://cmake.org/licensing
@ -14,6 +14,9 @@ if exists("b:did_indent")
endif
let b:did_indent = 1
let s:keepcpo= &cpo
set cpo&vim
setlocal indentexpr=CMakeGetIndent(v:lnum)
setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE(
@ -64,20 +67,23 @@ fun! CMakeGetIndent(lnum)
let ind = ind
else
if previous_line =~? cmake_indent_begin_regex
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
if previous_line =~? cmake_indent_open_regex
let ind = ind + &sw
let ind = ind + shiftwidth()
endif
endif
" Subtract
if this_line =~? cmake_indent_end_regex
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
if previous_line =~? cmake_indent_close_regex
let ind = ind - &sw
let ind = ind - shiftwidth()
endif
return ind
endfun
let &cpo = s:keepcpo
unlet s:keepcpo

File diff suppressed because one or more lines are too long

@ -2,7 +2,11 @@
# file Copyright.txt or https://cmake.org/licensing for details.
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
set(CMAKE_USER_MAKE_RULES_OVERRIDE_C ${CMAKE_CURRENT_SOURCE_DIR}/Source/Modules/OverrideC.cmake)
set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/Source/Modules/OverrideCXX.cmake)
project(CMake)
unset(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX)
unset(CMAKE_USER_MAKE_RULES_OVERRIDE_C)
# Make sure we can find internal find_package modules only used for
# building CMake and not for shipping externally
@ -60,13 +64,22 @@ if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT CMake_NO_CXX_STANDARD)
if (CMAKE_CXX_COMPILER_ID STREQUAL SunPro AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.14)
set(CMAKE_CXX_STANDARD 98)
else()
include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx14_cstdio.cmake)
if(NOT CMake_CXX14_CSTDIO_BROKEN)
if(NOT CMAKE_VERSION VERSION_LESS 3.8)
include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx17_check.cmake)
else()
set(CMake_CXX17_BROKEN 1)
endif()
if(NOT CMake_CXX17_BROKEN)
set(CMAKE_CXX_STANDARD 17)
else()
include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx14_check.cmake)
if(NOT CMake_CXX14_BROKEN)
set(CMAKE_CXX_STANDARD 14)
else()
set(CMAKE_CXX_STANDARD 11)
endif()
endif()
endif()
endif()
if(NOT CMake_TEST_EXTERNAL_CMAKE)
# include special compile flags for some compilers
@ -251,7 +264,12 @@ if(CMake_RUN_CLANG_TIDY)
endif()
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
# provide definitions for targets that require a rebuild once .clang-tidy changes
# Create a preprocessor definition that depends on .clang-tidy content so
# the compile command will change when .clang-tidy changes. This ensures
# that a subsequent build re-runs clang-tidy on all sources even if they
# do not otherwise need to be recompiled. Nothing actually uses this
# definition. We add it to targets on which we run clang-tidy just to
# get the build dependency on the .clang-tidy file.
file(SHA1 ${CMAKE_CURRENT_SOURCE_DIR}/.clang-tidy clang_tidy_sha1)
set(CLANG_TIDY_DEFINITIONS "CLANG_TIDY_SHA1=${clang_tidy_sha1}")
unset(clang_tidy_sha1)
@ -267,7 +285,7 @@ if(CMake_RUN_IWYU)
message(FATAL_ERROR "CMake_RUN_IWYU is ON but include-what-you-use is not found!")
endif()
set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE
"${IWYU_COMMAND};-Xiwyu;--mapping_file=${CMake_SOURCE_DIR}/Utilities/IWYU/mapping.imp")
"${IWYU_COMMAND};-Xiwyu;--mapping_file=${CMake_SOURCE_DIR}/Utilities/IWYU/mapping.imp;-w")
endif()
@ -292,6 +310,8 @@ endmacro()
# Simply to improve readability of the main script.
#-----------------------------------------------------------------------
macro (CMAKE_BUILD_UTILITIES)
find_package(Threads)
#---------------------------------------------------------------------
# Create the kwsys library for CMake.
set(KWSYS_NAMESPACE cmsys)
@ -526,7 +546,7 @@ macro (CMAKE_BUILD_UTILITIES)
#---------------------------------------------------------------------
# Build libuv library.
if(CMAKE_USE_SYSTEM_LIBUV)
find_package(LibUV 1.0.0)
find_package(LibUV 1.10.0)
if(NOT LIBUV_FOUND)
message(FATAL_ERROR
"CMAKE_USE_SYSTEM_LIBUV is ON but a libuv is not found!")

@ -102,12 +102,6 @@ if(NOT "@CMAKE_GENERATOR@" MATCHES "Xcode")
)
endif ()
if(NOT "@CMAKE_GENERATOR@" MATCHES "KDevelop")
list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
"Kdevelop"
)
endif ()
list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
# Exclude kwsys files from coverage results. They are reported
# (with better coverage results) on kwsys dashboards...

@ -17,6 +17,10 @@ if(MSVC OR _INTEL_WINDOWS)
else()
endif()
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stack:10000000")
endif()
#silence duplicate symbol warnings on AIX
if(CMAKE_SYSTEM_NAME MATCHES "AIX")
if(NOT CMAKE_COMPILER_IS_GNUCXX)

@ -1,5 +1,5 @@
CMake - Cross Platform Makefile Generator
Copyright 2000-2017 Kitware, Inc. and Contributors
Copyright 2000-2018 Kitware, Inc. and Contributors
All rights reserved.
Redistribution and use in source and binary forms, with or without

@ -146,8 +146,10 @@ The options are:
Specify the primary input source file to the command. This is
treated just like any value given to the ``DEPENDS`` option
but also suggests to Visual Studio generators where to hang
the custom command. At most one custom command may specify a
given source file as its main dependency.
the custom command. Each source file may have at most one command
specifying it as its main dependency. A compile command (i.e. for a
library or an executable) counts as an implicit main dependency which
gets silently overwritten by a custom command specification.
``OUTPUT``
Specify the output files the command is expected to produce.

@ -7,14 +7,15 @@ Add an executable to the project using the specified source files.
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
[source1] [source2 ...])
Adds an executable target called ``<name>`` to be built from the source
files listed in the command invocation. The ``<name>`` corresponds to the
logical target name and must be globally unique within a project. The
actual file name of the executable built is constructed based on
conventions of the native platform (such as ``<name>.exe`` or just
``<name>``).
files listed in the command invocation. (The source files can be omitted
here if they are added later using :command:`target_sources`.) The
``<name>`` corresponds to the logical target name and must be globally
unique within a project. The actual file name of the executable built is
constructed based on conventions of the native platform (such as
``<name>.exe`` or just ``<name>``).
By default the executable file will be created in the build tree
directory corresponding to the source tree directory in which the
@ -73,8 +74,9 @@ properties for more information.
Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can
be used to refer to ``<target>`` in subsequent commands. The ``<name>``
does not appear in the generated buildsystem as a make target. The
``<target>`` may not be an :ref:`Imported Target <Imported Targets>` or an
``ALIAS``. ``ALIAS`` targets can be used as targets to read properties
``<target>`` may not be a non-``GLOBAL``
:ref:`Imported Target <Imported Targets>` or an ``ALIAS``.
``ALIAS`` targets can be used as targets to read properties
from, executables for custom commands and custom targets. They can also be
tested for existence with the regular :command:`if(TARGET)` subcommand.
The ``<name>`` may not be used to modify properties of ``<target>``, that

@ -14,13 +14,14 @@ Normal Libraries
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
[source1] [source2 ...])
Adds a library target called ``<name>`` to be built from the source files
listed in the command invocation. The ``<name>`` corresponds to the
logical target name and must be globally unique within a project. The
actual file name of the library built is constructed based on
conventions of the native platform (such as ``lib<name>.a`` or
listed in the command invocation. (The source files can be omitted here
if they are added later using :command:`target_sources`.) The ``<name>``
corresponds to the logical target name and must be globally unique within
a project. The actual file name of the library built is constructed based
on conventions of the native platform (such as ``lib<name>.a`` or
``<name>.lib``).
``STATIC``, ``SHARED``, or ``MODULE`` may be given to specify the type of
@ -110,9 +111,9 @@ may contain only sources that compile, header files, and other files
that would not affect linking of a normal library (e.g. ``.txt``).
They may contain custom commands generating such sources, but not
``PRE_BUILD``, ``PRE_LINK``, or ``POST_BUILD`` commands. Object libraries
cannot be linked. Some native build systems may not like targets that
have only object files, so consider adding at least one real source file
to any target that references ``$<TARGET_OBJECTS:objlib>``.
cannot be linked. Some native build systems (such as Xcode) may not like
targets that have only object files, so consider adding at least one real
source file to any target that references ``$<TARGET_OBJECTS:objlib>``.
Alias Libraries
^^^^^^^^^^^^^^^
@ -124,7 +125,8 @@ Alias Libraries
Creates an :ref:`Alias Target <Alias Targets>`, such that ``<name>`` can be
used to refer to ``<target>`` in subsequent commands. The ``<name>`` does
not appear in the generated buildsystem as a make target. The ``<target>``
may not be an :ref:`Imported Target <Imported Targets>` or an ``ALIAS``.
may not be a non-``GLOBAL`` :ref:`Imported Target <Imported Targets>` or an
``ALIAS``.
``ALIAS`` targets can be used as linkable targets and as targets to
read properties from. They can also be tested for existence with the
regular :command:`if(TARGET)` subcommand. The ``<name>`` may not be used

@ -30,7 +30,7 @@ project that is useful but not necessary, such as a set of examples.
Typically the subdirectory should contain its own :command:`project`
command invocation so that a full build system will be generated in the
subdirectory (such as a VS IDE solution file). Note that inter-target
dependencies supercede this exclusion. If a target built by the
dependencies supersede this exclusion. If a target built by the
parent project depends on a target in the subdirectory, the dependee
target will be included in the parent project build system to satisfy
the dependency.

@ -62,7 +62,7 @@ as the real :command:`install` command:
.. code-block:: cmake
function(MY_INSTALL)
macro(my_install)
set(options OPTIONAL FAST)
set(oneValueArgs DESTINATION RENAME)
set(multiValueArgs TARGETS CONFIGURATIONS)

@ -10,7 +10,10 @@ Enable a language (CXX/C/Fortran/etc)
This command enables support for the named language in CMake. This is
the same as the project command but does not create any of the extra
variables that are created by the project command. Example languages
are CXX, C, Fortran.
are ``CXX``, ``C``, ``CUDA``, ``Fortran``, and ``ASM``.
If enabling ``ASM``, enable it last so that CMake can check whether
compilers for other languages like ``C`` work for assembly too.
This command must be called in file scope, not in a function call.
Furthermore, it must be called in the highest directory common to all
@ -19,4 +22,5 @@ indirectly through link dependencies. It is simplest to enable all
needed languages in the top-level directory of a project.
The ``OPTIONAL`` keyword is a placeholder for future implementation and
does not currently work.
does not currently work. Instead you can use the :module:`CheckLanguage`
module to verify support before enabling.

@ -90,8 +90,10 @@ Options:
Use the ANSI codepage.
``OEM``
Use the original equipment manufacturer (OEM) code page.
``UTF8``
Use the UTF-8 codepage.
``UTF8`` or ``UTF-8``
Use the UTF-8 codepage. Prior to CMake 3.11.0, only ``UTF8`` was accepted
for this encoding. In CMake 3.11.0, ``UTF-8`` was added for consistency with
the `UTF-8 RFC <https://www.ietf.org/rfc/rfc3629>`_ naming convention.
If more than one ``OUTPUT_*`` or ``ERROR_*`` option is given for the
same pipe the precedence is not specified.

@ -110,7 +110,7 @@ regular expressions, but much simpler. If ``RELATIVE`` flag is
specified, the results will be returned as relative paths to the given
path. The results will be ordered lexicographically.
By default ``GLOB`` lists directories - directories are omited in result if
By default ``GLOB`` lists directories - directories are omitted in result if
``LIST_DIRECTORIES`` is set to false.
.. note::
@ -232,6 +232,31 @@ Options to both ``DOWNLOAD`` and ``UPLOAD`` are:
``HTTPHEADER <HTTP-header>``
HTTP header for operation. Suboption can be repeated several times.
``NETRC <level>``
Specify whether the .netrc file is to be used for operation. If this
option is not specified, the value of the ``CMAKE_NETRC`` variable
will be used instead.
Valid levels are:
``IGNORED``
The .netrc file is ignored.
This is the default.
``OPTIONAL``
The .netrc file is optional, and information in the URL is preferred.
The file will be scanned to find which ever information is not specified
in the URL.
``REQUIRED``
The .netrc file is required, and information in the URL is ignored.
``NETRC_FILE <file>``
Specify an alternative .netrc file to the one in your home directory,
if the ``NETRC`` level is ``OPTIONAL`` or ``REQUIRED``. If this option
is not specified, the value of the ``CMAKE_NETRC_FILE`` variable will
be used instead.
If neither ``NETRC`` option is given CMake will check variables
``CMAKE_NETRC`` and ``CMAKE_NETRC_FILE``, respectively.
Additional options to ``DOWNLOAD`` are:
``EXPECTED_HASH ALGO=<value>``

@ -176,7 +176,7 @@ claim compatibility with the version requested it is unspecified which
one is chosen: unless the variable :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER`
is set no attempt is made to choose a highest or closest version number.
To control the order in which ``find_package`` checks for compatibiliy use
To control the order in which ``find_package`` checks for compatibility use
the two variables :variable:`CMAKE_FIND_PACKAGE_SORT_ORDER` and
:variable:`CMAKE_FIND_PACKAGE_SORT_DIRECTION`.
For instance in order to select the highest version one can set::

@ -26,14 +26,14 @@ list.
Foreach can also iterate over a generated range of numbers. There are
three types of this iteration:
* When specifying single number, the range will have elements 0 to
"total".
* When specifying single number, the range will have elements [0, ... to
"total"] (inclusive).
* When specifying two numbers, the range will have elements from the
first number to the second number.
first number to the second number (inclusive).
* The third optional number is the increment used to iterate from the
first number to the second number.
first number to the second number (inclusive).
::

@ -38,7 +38,21 @@ signatures that specify them. The common options are:
``CONFIGURATIONS``
Specify a list of build configurations for which the install rule
applies (Debug, Release, etc.).
applies (Debug, Release, etc.). Note that the values specified for
this option only apply to options listed AFTER the ``CONFIGURATIONS``
option. For example, to set separate install paths for the Debug and
Release configurations, do the following:
.. code-block:: cmake
install(TARGETS target
CONFIGURATIONS Debug
RUNTIME DESTINATION Debug/bin)
install(TARGETS target
CONFIGURATIONS Release
RUNTIME DESTINATION Release/bin)
Note that ``CONFIGURATIONS`` appears BEFORE ``RUNTIME DESTINATION``.
``COMPONENT``
Specify an installation component name with which the install rule
@ -346,8 +360,8 @@ specified that does not match that given to the targets associated with
included in the export but a target to which it links is not included
the behavior is unspecified.
In additon to cmake language files, the ``EXPORT_ANDROID_MK`` option maybe
used to specifiy an export to the android ndk build system. The Android
In addition to cmake language files, the ``EXPORT_ANDROID_MK`` option maybe
used to specify an export to the android ndk build system. The Android
NDK supports the use of prebuilt libraries, both static and shared. This
allows cmake to build the libraries of a project and make them available
to an ndk build system complete with transitive dependencies, include flags

@ -46,11 +46,15 @@ variable will be set to its argument. The argument must be a string with short
description of the project (only a few words).
Optionally you can specify which languages your project supports.
Example languages are ``C``, ``CXX`` (i.e. C++), ``Fortran``, etc.
Example languages include ``C``, ``CXX`` (i.e. C++), ``CUDA``,
``Fortran``, and ``ASM``.
By default ``C`` and ``CXX`` are enabled if no language options are
given. Specify language ``NONE``, or use the ``LANGUAGES`` keyword
and list no languages, to skip enabling any languages.
If enabling ``ASM``, list it last so that CMake can check whether
compilers for other languages like ``C`` work for assembly too.
If a variable exists called :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
the file pointed to by that variable will be included as the last step of the
project command.

@ -12,14 +12,15 @@ Add compile definitions to a target.
Specify compile definitions to use when compiling a given ``<target>``. The
named ``<target>`` must have been created by a command such as
:command:`add_executable` or :command:`add_library` and must not be an
:ref:`Imported Target <Imported Targets>`.
:ref:`ALIAS target <Alias Targets>`.
The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
specify the scope of the following arguments. ``PRIVATE`` and ``PUBLIC``
items will populate the :prop_tgt:`COMPILE_DEFINITIONS` property of
``<target>``. ``PUBLIC`` and ``INTERFACE`` items will populate the
:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property of ``<target>``. The
following arguments specify compile definitions. Repeated calls for the
:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property of ``<target>``.
(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
The following arguments specify compile definitions. Repeated calls for the
same ``<target>`` append items in the order called.
Arguments to ``target_compile_definitions`` may use "generator expressions"

@ -18,12 +18,13 @@ The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
specify the scope of the features. ``PRIVATE`` and ``PUBLIC`` items will
populate the :prop_tgt:`COMPILE_FEATURES` property of ``<target>``.
``PUBLIC`` and ``INTERFACE`` items will populate the
:prop_tgt:`INTERFACE_COMPILE_FEATURES` property of ``<target>``. Repeated
calls for the same ``<target>`` append items.
:prop_tgt:`INTERFACE_COMPILE_FEATURES` property of ``<target>``.
(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
Repeated calls for the same ``<target>`` append items.
The named ``<target>`` must have been created by a command such as
:command:`add_executable` or :command:`add_library` and must not be
an ``IMPORTED`` target.
:command:`add_executable` or :command:`add_library` and must not be an
:ref:`ALIAS target <Alias Targets>`.
Arguments to ``target_compile_features`` may use "generator expressions"
with the syntax ``$<...>``.

@ -12,8 +12,10 @@ Add compile options to a target.
Specify compile options to use when compiling a given target. The
named ``<target>`` must have been created by a command such as
:command:`add_executable` or :command:`add_library` and must not be an
:ref:`IMPORTED Target <Imported Targets>`. If ``BEFORE`` is specified,
the content will be prepended to the property instead of being appended.
:ref:`ALIAS target <Alias Targets>`.
If ``BEFORE`` is specified, the content will be prepended to the property
instead of being appended.
This command can be used to add any options, but
alternative commands exist to add preprocessor definitions
@ -27,8 +29,9 @@ The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
specify the scope of the following arguments. ``PRIVATE`` and ``PUBLIC``
items will populate the :prop_tgt:`COMPILE_OPTIONS` property of
``<target>``. ``PUBLIC`` and ``INTERFACE`` items will populate the
:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property of ``<target>``. The
following arguments specify compile options. Repeated calls for the same
:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property of ``<target>``.
(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
The following arguments specify compile options. Repeated calls for the same
``<target>`` append items in the order called.
Arguments to ``target_compile_options`` may use "generator expressions"

@ -12,7 +12,7 @@ Add include directories to a target.
Specify include directories to use when compiling a given target.
The named ``<target>`` must have been created by a command such
as :command:`add_executable` or :command:`add_library` and must not be an
:prop_tgt:`IMPORTED` target.
:ref:`ALIAS target <Alias Targets>`.
If ``BEFORE`` is specified, the content will be prepended to the property
instead of being appended.
@ -21,9 +21,9 @@ The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to specify
the scope of the following arguments. ``PRIVATE`` and ``PUBLIC`` items will
populate the :prop_tgt:`INCLUDE_DIRECTORIES` property of ``<target>``.
``PUBLIC`` and ``INTERFACE`` items will populate the
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES`
property of ``<target>``. The following arguments specify include
directories.
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` property of ``<target>``.
(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
The following arguments specify include directories.
Specified include directories may be absolute paths or relative paths.
Repeated calls for the same <target> append items in the order called. If

@ -19,7 +19,8 @@ All of them have the general form::
target_link_libraries(<target> ... <item>... ...)
The named ``<target>`` must have been created in the current directory by
a command such as :command:`add_executable` or :command:`add_library`.
a command such as :command:`add_executable` or :command:`add_library` and
must not be an :ref:`ALIAS target <Alias Targets>`.
Repeated calls for the same ``<target>`` append items in the order called.
Each ``<item>`` may be:

@ -12,14 +12,15 @@ Add sources to a target.
Specify sources to use when compiling a given target. The
named ``<target>`` must have been created by a command such as
:command:`add_executable` or :command:`add_library` and must not be an
:ref:`IMPORTED Target <Imported Targets>`.
:ref:`ALIAS target <Alias Targets>`.
The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
specify the scope of the following arguments. ``PRIVATE`` and ``PUBLIC``
items will populate the :prop_tgt:`SOURCES` property of
``<target>``. ``PUBLIC`` and ``INTERFACE`` items will populate the
:prop_tgt:`INTERFACE_SOURCES` property of ``<target>``. The
following arguments specify sources. Repeated calls for the same
:prop_tgt:`INTERFACE_SOURCES` property of ``<target>``.
(:ref:`IMPORTED targets <Imported Targets>` only support ``INTERFACE`` items.)
The following arguments specify sources. Repeated calls for the same
``<target>`` append items in the order called.
Arguments to ``target_sources`` may use "generator expressions"

@ -73,6 +73,13 @@ Merge the ``release-$ver`` branch to ``master``:
git pull
git merge --no-ff release-$ver
Review new ancestry to ensure nothing unexpected was merged to either branch:
.. code-block:: shell
git log --graph --boundary origin/master..master
git log --graph --boundary origin/release..release-$ver
Publish both ``master`` and ``release`` simultaneously:
.. code-block:: shell

@ -16,7 +16,7 @@ welcome to provide testing machines in order to help keep support for their
platforms working.
The `CMake Dashboard Scripts Repository`_ provides CTest scripts to drive
nightly, continous, and experimental testing of CMake. Use the following
nightly, continuous, and experimental testing of CMake. Use the following
commands to set up a new integration testing client:
.. code-block:: console

@ -1,25 +0,0 @@
KDevelop3
---------
Generates KDevelop 3 project files.
Project files for KDevelop 3 will be created in the top directory and
in every subdirectory which features a CMakeLists.txt file containing
a PROJECT() call. If you change the settings using KDevelop cmake
will try its best to keep your changes when regenerating the project
files. Additionally a hierarchy of UNIX makefiles is generated into
the build tree. Any standard UNIX-style make program can build the
project through the default make target. A "make install" target is
also provided.
This "extra" generator may be specified as:
``KDevelop3 - Unix Makefiles``
Generate with :generator:`Unix Makefiles`.
``KDevelop3``
Generate with :generator:`Unix Makefiles`.
For historical reasons this extra generator may be specified
directly as the main generator and it will be used as the
extra generator with :generator:`Unix Makefiles` automatically.

@ -19,13 +19,17 @@ Instance Selection
^^^^^^^^^^^^^^^^^^
VS 2017 supports multiple installations on the same machine.
CMake queries the Visual Studio Installer to locate VS instances.
If more than one instance is installed we do not define which one
is chosen by default. If the ``VS150COMNTOOLS`` environment variable
is set and points to the ``Common7/Tools`` directory within one of
the instances, that instance will be used. The environment variable
must remain consistently set whenever CMake is re-run within a given
build tree.
The :variable:`CMAKE_GENERATOR_INSTANCE` variable may be set as a
cache entry containing the absolute path to a Visual Studio instance.
If the value is not specified explicitly by the user or a toolchain file,
CMake queries the Visual Studio Installer to locate VS instances, chooses
one, and sets the variable as a cache entry to hold the value persistently.
When CMake first chooses an instance, if the ``VS150COMNTOOLS`` environment
variable is set and points to the ``Common7/Tools`` directory within
one of the instances, that instance will be used. Otherwise, if more
than one instance is installed we do not define which one is chosen
by default.
Toolset Selection
^^^^^^^^^^^^^^^^^

@ -831,12 +831,11 @@ Imported Targets
An :prop_tgt:`IMPORTED` target represents a pre-existing dependency. Usually
such targets are defined by an upstream package and should be treated as
immutable. It is not possible to use an :prop_tgt:`IMPORTED` target in the
left-hand-side of the :command:`target_compile_definitions`,
:command:`target_include_directories`, :command:`target_compile_options` or
:command:`target_link_libraries` commands, as that would be an attempt to
modify it. :prop_tgt:`IMPORTED` targets are designed to be used only in the
right-hand-side of those commands.
immutable. After declaring an :prop_tgt:`IMPORTED` target one can adjust its
target properties by using the customary commands such as
:command:`target_compile_definitions`, :command:`target_include_directories`,
:command:`target_compile_options` or :command:`target_link_libraries` just like
with any other regular target.
:prop_tgt:`IMPORTED` targets may have the same usage requirement properties
populated as binary targets, such as

@ -335,7 +335,7 @@ versions specified for each:
* ``Clang``: Clang compiler versions 2.9 through 3.4.
* ``GNU``: GNU compiler versions 4.4 through 5.0.
* ``MSVC``: Microsoft Visual Studio versions 2010 through 2017.
* ``SunPro``: Oracle SolarisStudio versions 12.4 through 12.5.
* ``SunPro``: Oracle SolarisStudio versions 12.4 through 12.6.
* ``Intel``: Intel compiler versions 12.1 through 17.0.
CMake is currently aware of the :prop_tgt:`C standards <C_STANDARD>`

@ -97,22 +97,38 @@ Available logical expressions are:
compile features and a list of supported compilers.
``$<COMPILE_LANGUAGE:lang>``
``1`` when the language used for compilation unit matches ``lang``,
otherwise ``0``. This expression used to specify compile options for
source files of a particular language in a target. For example, to specify
the use of the ``-fno-exceptions`` compile option (compiler id checks
elided):
otherwise ``0``. This expression may be used to specify compile options,
compile definitions, and include directories for source files of a
particular language in a target. For example:
.. code-block:: cmake
add_executable(myapp main.cpp foo.c bar.cpp)
add_executable(myapp main.cpp foo.c bar.cpp zot.cu)
target_compile_options(myapp
PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
)
target_compile_definitions(myapp
PRIVATE $<$<COMPILE_LANGUAGE:CXX>:COMPILING_CXX>
$<$<COMPILE_LANGUAGE:CUDA>:COMPILING_CUDA>
)
target_include_directories(myapp
PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/opt/foo/cxx_headers>
)
This generator expression has limited use because it is not possible to
use it with the Visual Studio generators. Portable buildsystems would
not use this expression, and would create separate libraries for each
source file language instead:
This specifies the use of the ``-fno-exceptions`` compile option,
``COMPILING_CXX`` compile definition, and ``cxx_headers`` include
directory for C++ only (compiler id checks elided). It also specifies
a ``COMPILING_CUDA`` compile definition for CUDA.
Note that with :ref:`Visual Studio Generators` and :generator:`Xcode` there
is no way to represent target-wide compile definitions or include directories
separately for ``C`` and ``CXX`` languages.
Also, with :ref:`Visual Studio Generators` there is no way to represent
target-wide flags separately for ``C`` and ``CXX`` languages. Under these
generators, expressions for both C and C++ sources will be evaluated
using ``CXX`` if there are any C++ sources and otherwise using ``C``.
A workaround is to create separate libraries for each source file language
instead:
.. code-block:: cmake
@ -122,20 +138,6 @@ Available logical expressions are:
add_executable(myapp main.cpp)
target_link_libraries(myapp myapp_c myapp_cxx)
The ``Makefile`` and ``Ninja`` based generators can also use this
expression to specify compile-language specific compile definitions
and include directories:
.. code-block:: cmake
add_executable(myapp main.cpp foo.c bar.cpp)
target_compile_definitions(myapp
PRIVATE $<$<COMPILE_LANGUAGE:CXX>:COMPILING_CXX>
)
target_include_directories(myapp
PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/opt/foo/cxx_headers>
)
Informational Expressions
=========================

@ -108,6 +108,5 @@ The following extra generators are known to CMake.
/generator/CodeBlocks
/generator/CodeLite
/generator/Eclipse CDT4
/generator/KDevelop3
/generator/Kate
/generator/Sublime Text 2

@ -80,6 +80,7 @@ All Modules
/module/ExternalData
/module/ExternalProject
/module/FeatureSummary
/module/FetchContent
/module/FindALSA
/module/FindArmadillo
/module/FindASPELL
@ -129,6 +130,7 @@ All Modules
/module/FindIcotool
/module/FindICU
/module/FindImageMagick
/module/FindIconv
/module/FindIntl
/module/FindITK
/module/FindJasper

@ -51,6 +51,14 @@ The :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` variable may also be used
to determine whether to report an error on use of deprecated macros or
functions.
Policies Introduced by CMake 3.11
=================================
.. toctree::
:maxdepth: 1
CMP0072: FindOpenGL prefers GLVND by default when available. </policy/CMP0072>
Policies Introduced by CMake 3.10
=================================

@ -121,6 +121,7 @@ Properties on Targets
/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG
/prop_tgt/ARCHIVE_OUTPUT_NAME
/prop_tgt/AUTOGEN_BUILD_DIR
/prop_tgt/AUTOGEN_PARALLEL
/prop_tgt/AUTOGEN_TARGET_DEPENDS
/prop_tgt/AUTOMOC_COMPILER_PREDEFINES
/prop_tgt/AUTOMOC_DEPEND_FILTERS
@ -184,6 +185,7 @@ Properties on Targets
/prop_tgt/HAS_CXX
/prop_tgt/IMPLICIT_DEPENDS_INCLUDE_TRANSFORM
/prop_tgt/IMPORTED_CONFIGURATIONS
/prop_tgt/IMPORTED_GLOBAL
/prop_tgt/IMPORTED_IMPLIB_CONFIG
/prop_tgt/IMPORTED_IMPLIB
/prop_tgt/IMPORTED_LIBNAME_CONFIG
@ -368,10 +370,12 @@ Properties on Source Files
/prop_sf/AUTORCC_OPTIONS
/prop_sf/COMPILE_DEFINITIONS
/prop_sf/COMPILE_FLAGS
/prop_sf/COMPILE_OPTIONS
/prop_sf/EXTERNAL_OBJECT
/prop_sf/Fortran_FORMAT
/prop_sf/GENERATED
/prop_sf/HEADER_FILE_ONLY
/prop_sf/INCLUDE_DIRECTORIES
/prop_sf/KEEP_EXTENSION
/prop_sf/LABELS
/prop_sf/LANGUAGE
@ -390,6 +394,8 @@ Properties on Source Files
/prop_sf/VS_DEPLOYMENT_LOCATION
/prop_sf/VS_INCLUDE_IN_VSIX
/prop_sf/VS_RESOURCE_GENERATOR
/prop_sf/VS_SHADER_DISABLE_OPTIMIZATIONS
/prop_sf/VS_SHADER_ENABLE_DEBUG
/prop_sf/VS_SHADER_ENTRYPOINT
/prop_sf/VS_SHADER_FLAGS
/prop_sf/VS_SHADER_MODEL

@ -96,7 +96,8 @@ following targets by setting the :variable:`CMAKE_AUTOMOC` variable. The
options to pass to ``moc``. The :variable:`CMAKE_AUTOMOC_MOC_OPTIONS`
variable may be populated to pre-set the options for all following targets.
Additional macro names to search for can be added to :prop_tgt:`AUTOMOC_MACRO_NAMES`.
Additional macro names to search for can be added to
:prop_tgt:`AUTOMOC_MACRO_NAMES`.
Additional ``moc`` dependency file names can be extracted from source code
by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
@ -216,19 +217,16 @@ enabling :prop_sf:`SKIP_AUTORCC` or the broader :prop_sf:`SKIP_AUTOGEN`.
Visual Studio Generators
========================
When using the :manual:`Visual Studio generators <cmake-generators(7)>`
CMake tries to use a ``PRE_BUILD``
:command:`custom command <add_custom_command>` instead
of a :command:`custom target <add_custom_target>` for autogen.
``PRE_BUILD`` can't be used when the autogen target depends on files.
When using the :manual:`Visual Studio generators <cmake-generators(7)>`,
CMake uses a ``PRE_BUILD`` :command:`custom command <add_custom_command>` for
:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
If the :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` processing depends on files,
a :command:`custom target <add_custom_target>` is used instead.
This happens when
- :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` is enabled and the origin target
depends on :prop_sf:`GENERATED` files which aren't excluded from autogen by
:prop_sf:`SKIP_AUTOMOC`, :prop_sf:`SKIP_AUTOUIC`, :prop_sf:`SKIP_AUTOGEN`
or :policy:`CMP0071`
- :prop_tgt:`AUTORCC` is enabled and a ``.qrc`` file is listed in
the origin target sources
- The origin target depends on :prop_sf:`GENERATED` files which aren't excluded
from :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC` by :prop_sf:`SKIP_AUTOMOC`,
:prop_sf:`SKIP_AUTOUIC`, :prop_sf:`SKIP_AUTOGEN` or :policy:`CMP0071`
- :prop_tgt:`AUTOGEN_TARGET_DEPENDS` lists a source file
qtmain.lib on Windows

@ -162,7 +162,7 @@ When the server is busy for a long time, it is polite to send back replies of
type "progress" to the client. These will contain a "progressMessage" with a
string describing the action currently taking place as well as
"progressMinimum", "progressMaximum" and "progressCurrent" with integer values
describing the range of progess.
describing the range of progress.
Messages of type "progress" will be followed by more "progress" messages or with
a message of type "reply" or "error" that complete the request.
@ -277,10 +277,6 @@ Giving the "major" version of the requested protocol version will make the serve
use the latest minor version of that protocol. Use this if you do not explicitly
need to depend on a specific minor version.
If the build directory already contains a CMake cache, it is sufficient to set
the "buildDirectory" attribute. To create a fresh build directory, additional
attributes are required depending on the protocol version.
Protocol version 1.0 requires the following attributes to be set:
* "sourceDirectory" with a path to the sources
@ -290,6 +286,10 @@ Protocol version 1.0 requires the following attributes to be set:
* "platform" with the generator platform (if supported by the generator)
* "toolset" with the generator toolset (if supported by the generator)
Protocol version 1.2 makes all but the build directory optional, provided
there is a valid cache in the build directory that contains all the other
information already.
Example::
[== "CMake Server" ==[
@ -458,6 +458,11 @@ Each project object can have the following keys:
"name"
contains the (sub-)projects name.
"minimumCMakeVersion"
contains the minimum cmake version allowed for this project, null if the
project doesn't specify one.
"hasInstallRule"
true if the project contains any install rules, false otherwise.
"sourceDirectory"
contains the current source directory
"buildDirectory"
@ -481,6 +486,12 @@ Each target object can have the following keys:
contains the current source directory.
"buildDirectory"
contains the current build directory.
"isGeneratorProvided"
true if the target is auto-created by a generator, false otherwise
"hasInstallRule"
true if the target contains any install rules, false otherwise.
"installPaths"
full path to the destination directories defined by target install rules.
"artifacts"
with a list of build artifacts. The list is sorted with the most
important artifacts first (e.g. a .DLL file is listed before a
@ -582,6 +593,51 @@ CMake will reply::
]== "CMake Server" ==]
Type "ctestInfo"
^^^^^^^^^^^^^^^^
The "ctestInfo" request can be used after a project was "compute"d successfully.
It will list the complete project test structure as it is known to cmake.
The reply will contain a key "configurations", which will contain a list of
configuration objects. Configuration objects are used to destinquish between
different configurations the build directory might have enabled. While most
generators only support one configuration, others might support several.
Each configuration object can have the following keys:
"name"
contains the name of the configuration. The name may be empty.
"projects"
contains a list of project objects, one for each build project.
Project objects define one (sub-)project defined in the cmake build system.
Each project object can have the following keys:
"name"
contains the (sub-)projects name.
"ctestInfo"
contains a list of test objects.
Each test object can have the following keys:
"ctestName"
contains the name of the test.
"ctestCommand"
contains the test command.
"properties"
contains a list of test property objects.
Each test property object can have the following keys:
"key"
contains the test property key.
"value"
contains the test property value.
Type "cmakeInputs"
^^^^^^^^^^^^^^^^^^

@ -42,6 +42,7 @@ Variables that Provide Information
/variable/CMAKE_FIND_PACKAGE_SORT_DIRECTION
/variable/CMAKE_FIND_PACKAGE_SORT_ORDER
/variable/CMAKE_GENERATOR
/variable/CMAKE_GENERATOR_INSTANCE
/variable/CMAKE_GENERATOR_PLATFORM
/variable/CMAKE_GENERATOR_TOOLSET
/variable/CMAKE_HOME_DIRECTORY
@ -49,6 +50,7 @@ Variables that Provide Information
/variable/CMAKE_IMPORT_LIBRARY_SUFFIX
/variable/CMAKE_JOB_POOL_COMPILE
/variable/CMAKE_JOB_POOL_LINK
/variable/CMAKE_JOB_POOLS
/variable/CMAKE_LANG_COMPILER_AR
/variable/CMAKE_LANG_COMPILER_RANLIB
/variable/CMAKE_LINK_LIBRARY_SUFFIX
@ -60,6 +62,8 @@ Variables that Provide Information
/variable/CMAKE_MATCH_n
/variable/CMAKE_MINIMUM_REQUIRED_VERSION
/variable/CMAKE_MINOR_VERSION
/variable/CMAKE_NETRC
/variable/CMAKE_NETRC_FILE
/variable/CMAKE_PARENT_LIST_FILE
/variable/CMAKE_PATCH_VERSION
/variable/CMAKE_PROJECT_DESCRIPTION
@ -121,6 +125,7 @@ Variables that Change Behavior
/variable/CMAKE_AUTOMOC_RELAXED_MODE
/variable/CMAKE_BACKWARDS_COMPATIBILITY
/variable/CMAKE_BUILD_TYPE
/variable/CMAKE_CODEBLOCKS_COMPILER_ID
/variable/CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES
/variable/CMAKE_CODELITE_USE_TARGETS
/variable/CMAKE_COLOR_MAKEFILE
@ -156,6 +161,7 @@ Variables that Change Behavior
/variable/CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE
/variable/CMAKE_INCLUDE_PATH
/variable/CMAKE_INSTALL_DEFAULT_COMPONENT_NAME
/variable/CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
/variable/CMAKE_INSTALL_MESSAGE
/variable/CMAKE_INSTALL_PREFIX
/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
@ -185,6 +191,7 @@ Variables that Change Behavior
/variable/CMAKE_USER_MAKE_RULES_OVERRIDE
/variable/CMAKE_WARN_DEPRECATED
/variable/CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION
/variable/CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY
Variables that Describe the System
==================================
@ -269,6 +276,7 @@ Variables that Control the Build
/variable/CMAKE_ANDROID_STL_TYPE
/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY
/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG
/variable/CMAKE_AUTOGEN_PARALLEL
/variable/CMAKE_AUTOMOC
/variable/CMAKE_AUTOMOC_COMPILER_PREDEFINES
/variable/CMAKE_AUTOMOC_DEPEND_FILTERS
@ -285,6 +293,7 @@ Variables that Control the Build
/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
/variable/CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_CONFIG
/variable/CMAKE_CONFIG_POSTFIX
/variable/CMAKE_CUDA_SEPARABLE_COMPILATION
/variable/CMAKE_DEBUG_POSTFIX
/variable/CMAKE_ENABLE_EXPORTS
/variable/CMAKE_EXE_LINKER_FLAGS
@ -406,6 +415,8 @@ Variables for Languages
/variable/CMAKE_LANG_CREATE_SHARED_MODULE
/variable/CMAKE_LANG_CREATE_STATIC_LIBRARY
/variable/CMAKE_LANG_FLAGS
/variable/CMAKE_LANG_FLAGS_CONFIG
/variable/CMAKE_LANG_FLAGS_CONFIG_INIT
/variable/CMAKE_LANG_FLAGS_DEBUG
/variable/CMAKE_LANG_FLAGS_DEBUG_INIT
/variable/CMAKE_LANG_FLAGS_INIT
@ -415,6 +426,7 @@ Variables for Languages
/variable/CMAKE_LANG_FLAGS_RELEASE_INIT
/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO
/variable/CMAKE_LANG_FLAGS_RELWITHDEBINFO_INIT
/variable/CMAKE_LANG_GHS_KERNEL_FLAGS_CONFIG
/variable/CMAKE_LANG_GHS_KERNEL_FLAGS_DEBUG
/variable/CMAKE_LANG_GHS_KERNEL_FLAGS_MINSIZEREL
/variable/CMAKE_LANG_GHS_KERNEL_FLAGS_RELEASE
@ -501,6 +513,7 @@ Variables for CTest
/variable/CTEST_P4_COMMAND
/variable/CTEST_P4_OPTIONS
/variable/CTEST_P4_UPDATE_OPTIONS
/variable/CTEST_RUN_CURRENT_SCRIPT
/variable/CTEST_SCP_COMMAND
/variable/CTEST_SITE
/variable/CTEST_SOURCE_DIRECTORY
@ -525,6 +538,7 @@ Variables for CPack
/variable/CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY
/variable/CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
/variable/CPACK_INCLUDE_TOPLEVEL_DIRECTORY
/variable/CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
/variable/CPACK_INSTALL_SCRIPT
/variable/CPACK_PACKAGING_INSTALL_PREFIX
/variable/CPACK_SET_DESTDIR

@ -11,6 +11,7 @@ Synopsis
cmake [<options>] (<path-to-source> | <path-to-existing-build>)
cmake [(-D <var>=<value>)...] -P <cmake-script-file>
cmake --build <dir> [<options>...] [-- <build-tool-options>...]
cmake --open <dir>
cmake -E <command> [<options>...]
cmake --find-package <options>...
@ -51,6 +52,10 @@ Options
``--build <dir>``
See `Build Tool Mode`_.
``--open <dir>``
Open the generated project in the associated application. This is
only supported by some generators.
``-N``
View mode only.
@ -332,7 +337,7 @@ Available commands are:
``paxr`` (restricted pax, default), and ``zip``.
``time <command> [<args>...]``
Run command and return elapsed time.
Run command and display elapsed time.
``touch <file>``
Touch a file.

@ -62,6 +62,12 @@ Options
Run cpack with debug output (for CPack developers).
``--trace``
Put underlying cmake scripts in trace mode.
``--trace-expand``
Put underlying cmake scripts in expanded trace mode.
``-P <package name>``
override/define CPACK_PACKAGE_NAME

@ -3,12 +3,18 @@
ctest(1)
********
.. contents::
Synopsis
========
.. parsed-literal::
ctest [<options>]
ctest <path-to-source> <path-to-build> --build-generator <generator>
[<options>...] [-- <build-options>...] [--test-command <test>]
ctest (-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>)
[-- <dashboard-options>...]
Description
===========
@ -55,17 +61,21 @@ Options
``-F``
Enable failover.
This option allows ctest to resume a test set execution that was
This option allows CTest to resume a test set execution that was
previously interrupted. If no interruption occurred, the ``-F`` option
will have no effect.
``-j <jobs>, --parallel <jobs>``
Run the tests in parallel using the given number of jobs.
This option tells ctest to run the tests in parallel using given
This option tells CTest to run the tests in parallel using given
number of jobs. This option can also be set by setting the
environment variable ``CTEST_PARALLEL_LEVEL``.
This option can be used with the :prop_test:`PROCESSORS` test property.
See `Label and Subproject Summary`_.
``--test-load <level>``
While running tests in parallel (e.g. with ``-j``), try not to start
tests when they may cause the CPU load to pass above a given threshold.
@ -74,7 +84,7 @@ Options
``TestLoad`` option of the `CTest Test Step`_.
``-Q,--quiet``
Make ctest quiet.
Make CTest quiet.
This option will suppress all the output. The output log file will
still be generated if the ``--output-log`` is specified. Options such
@ -84,37 +94,37 @@ Options
``-O <file>, --output-log <file>``
Output to log file.
This option tells ctest to write all its output to a log file.
This option tells CTest to write all its output to a log file.
``-N,--show-only``
Disable actual execution of tests.
This option tells ctest to list the tests that would be run but not
This option tells CTest to list the tests that would be run but not
actually run them. Useful in conjunction with the ``-R`` and ``-E``
options.
``-L <regex>, --label-regex <regex>``
Run tests with labels matching regular expression.
This option tells ctest to run only the tests whose labels match the
This option tells CTest to run only the tests whose labels match the
given regular expression.
``-R <regex>, --tests-regex <regex>``
Run tests matching regular expression.
This option tells ctest to run only the tests whose names match the
This option tells CTest to run only the tests whose names match the
given regular expression.
``-E <regex>, --exclude-regex <regex>``
Exclude tests matching regular expression.
This option tells ctest to NOT run the tests whose names match the
This option tells CTest to NOT run the tests whose names match the
given regular expression.
``-LE <regex>, --label-exclude <regex>``
Exclude tests with labels matching regular expression.
This option tells ctest to NOT run the tests whose labels match the
This option tells CTest to NOT run the tests whose labels match the
given regular expression.
``-FA <regex>, --fixture-exclude-any <regex>``
@ -137,11 +147,13 @@ Options
``-D <dashboard>, --dashboard <dashboard>``
Execute dashboard test.
This option tells ctest to act as a CDash client and perform a
This option tells CTest to act as a CDash client and perform a
dashboard test. All tests are <Mode><Test>, where Mode can be
Experimental, Nightly, and Continuous, and Test can be Start,
Update, Configure, Build, Test, Coverage, and Submit.
See `Dashboard Client`_.
``-D <var>:<type>=<value>``
Define a variable for script mode.
@ -153,35 +165,33 @@ Options
``-M <model>, --test-model <model>``
Sets the model for a dashboard.
This option tells ctest to act as a CDash client where the ``<model>``
This option tells CTest to act as a CDash client where the ``<model>``
can be ``Experimental``, ``Nightly``, and ``Continuous``.
Combining ``-M`` and ``-T`` is similar to ``-D``.
See `Dashboard Client`_.
``-T <action>, --test-action <action>``
Sets the dashboard action to perform.
This option tells ctest to act as a CDash client and perform some
This option tells CTest to act as a CDash client and perform some
action such as ``start``, ``build``, ``test`` etc. See
`Dashboard Client Steps`_ for the full list of actions.
Combining ``-M`` and ``-T`` is similar to ``-D``.
``--track <track>``
Specify the track to submit dashboard to
Submit dashboard to specified track instead of default one. By
default, the dashboard is submitted to Nightly, Experimental, or
Continuous track, but by specifying this option, the track can be
arbitrary.
See `Dashboard Client`_.
``-S <script>, --script <script>``
Execute a dashboard for a configuration.
This option tells ctest to load in a configuration script which sets
This option tells CTest to load in a configuration script which sets
a number of parameters such as the binary and source directories.
Then ctest will do what is required to create and run a dashboard.
Then CTest will do what is required to create and run a dashboard.
This option basically sets up a dashboard and then runs ``ctest -D``
with the appropriate options.
See `Dashboard Client`_.
``-SP <script>, --script-new-process <script>``
Execute a dashboard for a configuration.
@ -190,16 +200,12 @@ Options
script may modify the environment and you do not want the modified
environment to impact other ``-S`` scripts.
``-A <file>, --add-notes <file>``
Add a notes file with submission.
This option tells ctest to include a notes file when submitting
dashboard.
See `Dashboard Client`_.
``-I [Start,End,Stride,test#,test#|Test file], --tests-information``
Run a specific number of tests by number.
This option causes ctest to run tests starting at number Start,
This option causes CTest to run tests starting at number Start,
ending at number End, and incrementing by Stride. Any additional
numbers after Stride are considered individual test numbers. Start,
End,or stride can be empty. Optionally a file can be given that
@ -214,11 +220,11 @@ Options
``--rerun-failed``
Run only the tests that failed previously.
This option tells ctest to perform only the tests that failed during
its previous run. When this option is specified, ctest ignores all
This option tells CTest to perform only the tests that failed during
its previous run. When this option is specified, CTest ignores all
other options intended to modify the list of tests to run (``-L``, ``-R``,
``-E``, ``-LE``, ``-I``, etc). In the event that CTest runs and no tests
fail, subsequent calls to ctest with the ``--rerun-failed`` option will run
fail, subsequent calls to CTest with the ``--rerun-failed`` option will run
the set of tests that most recently failed (if any).
``--repeat-until-fail <n>``
@ -236,7 +242,7 @@ Options
``--interactive-debug-mode [0|1]``
Set the interactive mode to 0 or 1.
This option causes ctest to run tests in either an interactive mode
This option causes CTest to run tests in either an interactive mode
or a non-interactive mode. On Windows this means that in
non-interactive mode, all system debug pop up windows are blocked.
In dashboard mode (Experimental, Nightly, Continuous), the default
@ -246,36 +252,139 @@ Options
``--no-label-summary``
Disable timing summary information for labels.
This option tells ctest not to print summary information for each
This option tells CTest not to print summary information for each
label associated with the tests run. If there are no labels on the
tests, nothing extra is printed.
``--no-subproject-summary``
See `Label and Subproject Summary`_.
``--no-subproject-summary``
Disable timing summary information for subprojects.
This option tells ctest not to print summary information for each
This option tells CTest not to print summary information for each
subproject associated with the tests run. If there are no subprojects on the
tests, nothing extra is printed.
``--build-and-test <path-to-source> <path-to-build>``
Configure, build and run a test.
See `Label and Subproject Summary`_.
``--build-and-test``
See `Build and Test Mode`_.
``--test-output-size-passed <size>``
Limit the output for passed tests to ``<size>`` bytes.
``--test-output-size-failed <size>``
Limit the output for failed tests to ``<size>`` bytes.
``--overwrite``
Overwrite CTest configuration option.
By default CTest uses configuration options from configuration file.
This option will overwrite the configuration option.
``--force-new-ctest-process``
Run child CTest instances as new processes.
By default CTest will run child CTest instances within the same
process. If this behavior is not desired, this argument will
enforce new processes for child CTest processes.
``--schedule-random``
Use a random order for scheduling tests.
This option will run the tests in a random order. It is commonly
used to detect implicit dependencies in a test suite.
``--submit-index``
Legacy option for old Dart2 dashboard server feature.
Do not use.
``--timeout <seconds>``
Set a global timeout on all tests.
This option will set a global timeout on all tests that do not
already have a timeout set on them.
``--stop-time <time>``
Set a time at which all tests should stop running.
Set a real time of day at which all tests should timeout. Example:
``7:00:00 -0400``. Any time format understood by the curl date parser
is accepted. Local time is assumed if no timezone is specified.
``--print-labels``
Print all available test labels.
This option will not run any tests, it will simply print the list of
all labels associated with the test set.
.. include:: OPTIONS_HELP.txt
.. _`Label and Subproject Summary`:
Label and Subproject Summary
============================
CTest prints timing summary information for each label and subproject
associated with the tests run. The label time summary will not include labels
that are mapped to subprojects.
When the :prop_test:`PROCESSORS` test property is set, CTest will display a
weighted test timing result in label and subproject summaries. The time is
reported with `sec*proc` instead of just `sec`.
The weighted time summary reported for each label or subproject j is computed
as::
Weighted Time Summary for Label/Subproject j =
sum(raw_test_time[j,i] * num_processors[j,i], i=1...num_tests[j])
This option tells ctest to configure (i.e. run cmake on), build,
and or execute a test. The configure and test steps are optional.
The arguments to this command line are the source and binary
directories.
The ``--build-generator`` option *must* be provided to use
``--build-and-test``. If ``--test-command`` is specified then that will be
run after the build is complete. Other options that affect this
mode are ``--build-target``, ``--build-nocmake``, ``--build-run-dir``,
``--build-two-config``, ``--build-exe-dir``,
``--build-project``, ``--build-noclean`` and ``--build-options``.
for labels/subprojects j=1...total
where:
* raw_test_time[j,i]: Wall-clock time for the ith test for the jth label or
subproject
* num_processors[j,i]: Value of the CTest PROCESSORS property for the ith test
for the jth label or subproject
* num_tests[j]: Number of tests associated with the jth label or subproject
* total: Total number of labels or subprojects that have at least one test run
Therefore, the weighted time summary for each label or subproject represents
the amount of time that CTest gave to run the tests for each label or
subproject and gives a good representation of the total expense of the tests
for each label or subproject when compared to other labels or subprojects.
For example, if "SubprojectA" showed "100 sec*proc" and "SubprojectB" showed
"10 sec*proc", then CTest allocated approximately 10 times the CPU/core time
to run the tests for "SubprojectA" than for "SubprojectB" (e.g. so if effort
is going to be expended to reduce the cost of the test suite for the whole
project, then reducing the cost of the test suite for "SubprojectA" would
likely have a larger impact than effort to reduce the cost of the test suite
for "SubprojectB").
.. _`Build and Test Mode`:
Build and Test Mode
===================
CTest provides a command-line signature to to configure (i.e. run cmake on),
build, and or execute a test::
ctest --build-and-test <path-to-source> <path-to-build>
--build-generator <generator> [<options>...] [-- <build-options>...]
[--test-command <test>]
The configure and test steps are optional. The arguments to this command line
are the source and binary directories. The ``--build-generator`` option *must*
be provided to use ``--build-and-test``. If ``--test-command`` is specified
then that will be run after the build is complete. Other options that affect
this mode include:
``--build-target``
Specify a specific target to build.
This option goes with the ``--build-and-test`` option, if left out the
``all`` target is built.
If left out the ``all`` target is built.
``--build-nocmake``
Run the build without running cmake first.
@ -324,67 +433,47 @@ Options
``--test-command``
The test to run with the ``--build-and-test`` option.
``--test-output-size-passed <size>``
Limit the output for passed tests to ``<size>`` bytes.
``--test-output-size-failed <size>``
Limit the output for failed tests to ``<size>`` bytes.
``--test-timeout``
The time limit in seconds, internal use only.
``--tomorrow-tag``
Nightly or experimental starts with next day tag.
This is useful if the build will not finish in one day.
``--ctest-config``
The configuration file used to initialize CTest state when submitting dashboards.
The time limit in seconds
This option tells CTest to use different initialization file instead
of CTestConfiguration.tcl. This way multiple initialization files
can be used for example to submit to multiple dashboards.
``--overwrite``
Overwrite CTest configuration option.
.. _`Dashboard Client`:
By default ctest uses configuration options from configuration file.
This option will overwrite the configuration option.
Dashboard Client
================
``--extra-submit <file>[;<file>]``
Submit extra files to the dashboard.
CTest can operate as a client for the `CDash`_ software quality dashboard
application. As a dashboard client, CTest performs a sequence of steps
to configure, build, and test software, and then submits the results to
a `CDash`_ server. The command-line signature used to submit to `CDash`_ is::
This option will submit extra files to the dashboard.
ctest (-D <dashboard> | -M <model> -T <action> | -S <script> | -SP <script>)
[-- <dashboard-options>...]
``--force-new-ctest-process``
Run child CTest instances as new processes.
Options for Dashboard Client include:
By default CTest will run child CTest instances within the same
process. If this behavior is not desired, this argument will
enforce new processes for child CTest processes.
``--track <track>``
Specify the track to submit dashboard to
``--schedule-random``
Use a random order for scheduling tests.
Submit dashboard to specified track instead of default one. By
default, the dashboard is submitted to Nightly, Experimental, or
Continuous track, but by specifying this option, the track can be
arbitrary.
This option will run the tests in a random order. It is commonly
used to detect implicit dependencies in a test suite.
``-A <file>, --add-notes <file>``
Add a notes file with submission.
``--submit-index``
Legacy option for old Dart2 dashboard server feature.
Do not use.
This option tells CTest to include a notes file when submitting
dashboard.
``--timeout <seconds>``
Set a global timeout on all tests.
``--tomorrow-tag``
Nightly or experimental starts with next day tag.
This option will set a global timeout on all tests that do not
already have a timeout set on them.
This is useful if the build will not finish in one day.
``--stop-time <time>``
Set a time at which all tests should stop running.
``--extra-submit <file>[;<file>]``
Submit extra files to the dashboard.
Set a real time of day at which all tests should timeout. Example:
``7:00:00 -0400``. Any time format understood by the curl date parser
is accepted. Local time is assumed if no timezone is specified.
This option will submit extra files to the dashboard.
``--http1.0``
Submit using HTTP 1.0.
@ -399,26 +488,6 @@ Options
this to maintain compatibility with an older version of CDash which
doesn't support compressed test output.
``--print-labels``
Print all available test labels.
This option will not run any tests, it will simply print the list of
all labels associated with the test set.
.. include:: OPTIONS_HELP.txt
.. _`Dashboard Client`:
Dashboard Client
================
CTest can operate as a client for the `CDash`_ software quality dashboard
application. As a dashboard client, CTest performs a sequence of steps
to configure, build, and test software, and then submits the results to
a `CDash`_ server.
.. _`CDash`: http://cdash.org/
Dashboard Client Steps
----------------------
@ -731,7 +800,6 @@ Configuration settings to specify the version control tool include:
* `CTest Script`_ variable: :variable:`CTEST_UPDATE_VERSION_ONLY`
Additional configuration settings include:
``NightlyStartTime``
@ -773,6 +841,7 @@ Configuration settings include:
* `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
* :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
See `Label and Subproject Summary`_.
.. _`CTest Build Step`:
@ -804,6 +873,8 @@ Configuration settings include:
* `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
* :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
See `Label and Subproject Summary`_.
``MakeCommand``
Command-line to launch the software build process.
It will be executed in the location specified by the
@ -847,6 +918,7 @@ Configuration settings include:
* `CTest Script`_ variable: :variable:`CTEST_LABELS_FOR_SUBPROJECTS`
* :module:`CTest` module variable: ``CTEST_LABELS_FOR_SUBPROJECTS``
See `Label and Subproject Summary`_.
``TestLoad``
While running tests in parallel (e.g. with ``-j``), try not to start
@ -1082,3 +1154,5 @@ See Also
========
.. include:: LINKS.txt
.. _`CDash`: http://cdash.org/

@ -0,0 +1 @@
.. cmake-module:: ../../Modules/FetchContent.cmake

@ -0,0 +1 @@
.. cmake-module:: ../../Modules/FindIconv.cmake

@ -11,10 +11,15 @@ diagnostics expect target names to match a restricted pattern.
Target names may contain upper and lower case letters, numbers, the underscore
character (_), dot(.), plus(+) and minus(-). As a special case, ALIAS
targets and IMPORTED targets may contain two consequtive colons.
targets and IMPORTED targets may contain two consecutive colons.
Target names reserved by one or more CMake generators are not allowed.
Among others these include "all", "help" and "test".
Among others these include "all", "clean", "help", and "install".
Target names associated with optional features, such as "test" and "package",
may also be reserved. CMake 3.10 and below always reserve them. CMake 3.11
and above reserve them only when the corresponding feature is enabled
(e.g. by including the :module:`CTest` or :module:`CPack` modules).
The OLD behavior for this policy is to allow creating targets with
reserved names or which do not match the validity pattern.

@ -0,0 +1,26 @@
CMP0072
-------
:module:`FindOpenGL` prefers GLVND by default when available.
The :module:`FindOpenGL` module provides an ``OpenGL::GL`` target and an
``OPENGL_LIBRARIES`` variable for projects to use for legacy GL interfaces.
When both a legacy GL library (e.g. ``libGL.so``) and GLVND libraries
for OpenGL and GLX (e.g. ``libOpenGL.so`` and ``libGLX.so``) are available,
the module must choose between them. It documents an ``OpenGL_GL_PREFERENCE``
variable that can be used to specify an explicit preference. When no such
preference is set, the module must choose a default preference.
CMake 3.11 and above prefer to choose GLVND libraries. This policy provides
compatibility with projects that expect the legacy GL library to be used.
The ``OLD`` behavior for this policy is to set ``OpenGL_GL_PREFERENCE`` to
``LEGACY``. The ``NEW`` behavior for this policy is to set
``OpenGL_GL_PREFERENCE`` to ``GLVND``.
This policy was introduced in CMake version 3.11. CMake version
|release| warns when the policy is not set and uses ``OLD`` behavior.
Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW``
explicitly.
.. include:: DEPRECATED.txt

@ -4,11 +4,10 @@ DEBUG_CONFIGURATIONS
Specify which configurations are for debugging.
The value must be a semi-colon separated list of configuration names.
Currently this property is used only by the target_link_libraries
command (see its documentation for details). Additional uses may be
defined in the future.
Currently this property is used only by the :command:`target_link_libraries`
command. Additional uses may be defined in the future.
This property must be set at the top level of the project and before
the first target_link_libraries command invocation. If any entry in
the first :command:`target_link_libraries` command invocation. If any entry in
the list does not match a valid configuration for the project the
behavior is undefined.

@ -19,5 +19,8 @@ Defined pools could be used globally by setting
or per target by setting the target properties
:prop_tgt:`JOB_POOL_COMPILE` and :prop_tgt:`JOB_POOL_LINK`.
If not set, this property uses the value of the :variable:`CMAKE_JOB_POOLS`
variable.
Build targets provided by CMake that are meant for individual interactive
use, such as ``install``, are placed in the ``console`` pool automatically.

@ -17,3 +17,13 @@ by the native build tool. Xcode does not support per-configuration
definitions on source files.
.. include:: /include/COMPILE_DEFINITIONS_DISCLAIMER.txt
Contents of ``COMPILE_DEFINITIONS`` may use "generator expressions"
with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
manual for available expressions. However, :generator:`Xcode`
does not support per-config per-source settings, so expressions
that depend on the build configuration are not allowed with that
generator.
Generator expressions should be preferred instead of setting the alternative per-configuration
property.

@ -3,9 +3,9 @@ COMPILE_FLAGS
Additional flags to be added when compiling this source file.
These flags will be added to the list of compile flags when this
source file builds. Use :prop_sf:`COMPILE_DEFINITIONS` to pass
additional preprocessor definitions.
The ``COMPILE_FLAGS`` property sets additional compiler flags used to build
source files. Use :prop_sf:`COMPILE_DEFINITIONS` to pass additional
preprocessor definitions.
Contents of ``COMPILE_FLAGS`` may use "generator expressions"
with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`

@ -0,0 +1,17 @@
COMPILE_OPTIONS
---------------
List of additional options to pass to the compiler.
This property holds a :ref:`;-list <CMake Language Lists>` of options
and will be added to the list of compile flags when this
source file builds. Use :prop_sf:`COMPILE_DEFINITIONS` to pass
additional preprocessor definitions and :prop_sf:`INCLUDE_DIRECTORIES` to pass
additional include directories.
Contents of ``COMPILE_OPTIONS`` may use "generator expressions" with the
syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)` manual
for available expressions. However, :generator:`Xcode`
does not support per-config per-source settings, so expressions
that depend on the build configuration are not allowed with that
generator.

@ -1,8 +1,23 @@
GENERATED
---------
Is this source file generated as part of the build process.
Is this source file generated as part of the build or CMake process.
If a source file is generated by the build process CMake will handle
it differently in terms of dependency checking etc. Otherwise having
a non-existent source file could create problems.
Tells the internal CMake engine that a source file is generated by an outside
process such as another build step, or the execution of CMake itself. This
information is then used to exempt the file from any existence or validity
checks. Generated files are created by the execution of commands such as
:command:`add_custom_command` and :command:`file(GENERATE)`.
When a generated file created by an :command:`add_custom_command` command
is explicitly listed as a source file for any target in the same
directory scope (which usually means the same ``CMakeLists.txt`` file),
CMake will automatically create a dependency to make sure the file is
generated before building that target.
Generated sources may be hidden in some IDE tools, while in others they might
be shown. For the special case of sources generated by CMake's :prop_tgt:`AUTOMOC`
or :prop_tgt:`AUTORCC` functionality, the :prop_gbl:`AUTOGEN_SOURCE_GROUP`,
:prop_gbl:`AUTOMOC_SOURCE_GROUP` and :prop_gbl:`AUTORCC_SOURCE_GROUP` target
properties may influence where the generated sources are grouped in the project's
file lists.

@ -0,0 +1,18 @@
INCLUDE_DIRECTORIES
-------------------
List of preprocessor include file search directories.
This property holds a :ref:`;-list <CMake Language Lists>` of paths
and will be added to the list of include directories when this
source file builds. These directories will take precedence over directories
defined at target level except for :generator:`Xcode` generator due to technical
limitations.
Relative paths should not be added to this property directly.
Contents of ``INCLUDE_DIRECTORIES`` may use "generator expressions" with
the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)` manual
for available expressions. However, :generator:`Xcode` does not support
per-config per-source settings, so expressions that depend on the build
configuration are not allowed with that generator.

@ -0,0 +1,6 @@
VS_SHADER_DISABLE_OPTIMIZATIONS
-------------------------------
Disable compiler optimizations for an ``.hlsl`` source file. This adds the
``-Od`` flag to the command line for the FxCompiler tool. Specify the value
``true`` for this property to disable compiler optimizations.

@ -0,0 +1,6 @@
VS_SHADER_ENABLE_DEBUG
----------------------
Enable debugging information for an ``.hlsl`` source file. This adds the
``-Zi`` flag to the command line for the FxCompiler tool. Specify the value
``true`` to generate debugging information for the compiled shader.

@ -0,0 +1,21 @@
AUTOGEN_PARALLEL
----------------
Number of parallel ``moc`` or ``uic`` processes to start when using
:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
The custom `<origin>_autogen` target starts a number of threads of which
each one parses a source file and on demand starts a ``moc`` or ``uic``
process. :prop_tgt:`AUTOGEN_PARALLEL` controls how many parallel threads
(and therefore ``moc`` or ``uic`` processes) are started.
- An empty (or unset) value or the string ``AUTO`` sets the number of
threads/processes to the number of physical CPUs on the host system.
- A positive non zero integer value sets the exact thread/process count.
- Otherwise a single thread/process is started.
By default :prop_tgt:`AUTOGEN_PARALLEL` is initialized from
:variable:`CMAKE_AUTOGEN_PARALLEL`.
See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.

@ -3,15 +3,29 @@ AUTOGEN_TARGET_DEPENDS
Target dependencies of the corresponding ``_autogen`` target.
Targets which have their :prop_tgt:`AUTOMOC` target ``ON`` have a
corresponding ``_autogen`` target which is used to autogenerate generate moc
files. As this ``_autogen`` target is created at generate-time, it is not
possible to define dependencies of it, such as to create inputs for the ``moc``
executable.
Targets which have their :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` property
``ON`` have a corresponding ``_autogen`` target which is used to auto generate
``moc`` and ``uic`` files. As this ``_autogen`` target is created at
generate-time, it is not possible to define dependencies of it,
such as to create inputs for the ``moc`` or ``uic`` executable.
The ``AUTOGEN_TARGET_DEPENDS`` target property can be set instead to a list of
dependencies for the ``_autogen`` target. The buildsystem will be generated to
depend on its contents.
The :prop_tgt:`AUTOGEN_TARGET_DEPENDS` target property can be set instead to a
list of dependencies of the ``_autogen`` target. Dependencies can be target
names or file names.
See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.
Use cases
^^^^^^^^^
If :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` depends on a file that is either
- a :prop_sf:`GENERATED` non C++ file (e.g. a :prop_sf:`GENERATED` ``.json``
or ``.ui`` file) or
- a :prop_sf:`GENERATED` C++ file that isn't recognized by :prop_tgt:`AUTOMOC`
and :prop_tgt:`AUTOUIC` because it's skipped by :prop_sf:`SKIP_AUTOMOC`,
:prop_sf:`SKIP_AUTOUIC`, :prop_sf:`SKIP_AUTOGEN` or :policy:`CMP0071` or
- a file that isn't in the target's sources
it must added to :prop_tgt:`AUTOGEN_TARGET_DEPENDS`.

@ -71,7 +71,8 @@ automoc targets together in an IDE, e.g. in MSVS.
The global property :prop_gbl:`AUTOGEN_SOURCE_GROUP` can be used to group
files generated by :prop_tgt:`AUTOMOC` together in an IDE, e.g. in MSVS.
Additional macro names to search for can be added to :prop_tgt:`AUTOMOC_MACRO_NAMES`.
Additional macro names to search for can be added to
:prop_tgt:`AUTOMOC_MACRO_NAMES`.
Additional ``moc`` dependency file names can be extracted from source code
by using :prop_tgt:`AUTOMOC_DEPEND_FILTERS`.
@ -82,5 +83,8 @@ which is controlled by :prop_tgt:`AUTOMOC_COMPILER_PREDEFINES`.
Source C++ files can be excluded from :prop_tgt:`AUTOMOC` processing by
enabling :prop_sf:`SKIP_AUTOMOC` or the broader :prop_sf:`SKIP_AUTOGEN`.
The number of parallel ``moc`` processes to start can be modified by
setting :prop_tgt:`AUTOGEN_PARALLEL`.
See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.

@ -1,21 +1,27 @@
AUTOMOC_DEPEND_FILTERS
----------------------
Filter definitions used by :prop_tgt:`AUTOMOC` to extract file names from
source code as additional dependencies for the ``moc`` file.
This property is only used if the :prop_tgt:`AUTOMOC` property is ``ON``
for this target.
Filter definitions used by :prop_tgt:`AUTOMOC` to extract file names from a
source file that are registered as additional dependencies for the
``moc`` file of the source file.
Filters are defined as ``KEYWORD;REGULAR_EXPRESSION`` pairs. First the file
content is searched for ``KEYWORD``. If it is found at least once, then file
names are extracted by successively searching for ``REGULAR_EXPRESSION`` and
taking the first match group.
Consider a filter extracts the file name ``DEP`` from the content of a file
``FOO``. If ``DEP`` changes, then the ``moc`` file for ``FOO`` gets rebuilt.
The file ``DEP`` is searched for first in the vicinity
of ``FOO`` and afterwards in the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
The file name found in the first match group is searched for
- first in the vicinity of the source file
- and afterwards in the target's :prop_tgt:`INCLUDE_DIRECTORIES`.
If any of the extracted files changes, then the ``moc`` file for the source
file gets rebuilt even when the source file itself doesn't change.
If any of the extracted files is :prop_sf:`GENERATED` or if it is not in the
target's sources, then it might be necessary to add it to the
``_autogen`` target dependencies.
See :prop_tgt:`AUTOGEN_TARGET_DEPENDS` for reference.
By default :prop_tgt:`AUTOMOC_DEPEND_FILTERS` is initialized from
:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`, which is empty by default.
@ -24,22 +30,75 @@ See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.
Example
^^^^^^^
Example 1
^^^^^^^^^
Consider a file ``FOO.hpp`` holds a custom macro ``OBJ_JSON_FILE`` and we
want the ``moc`` file to depend on the macro`s file name argument::
A header file ``my_class.hpp`` uses a custom macro ``JSON_FILE_MACRO`` which
is defined in an other header ``macros.hpp``.
We want the ``moc`` file of ``my_class.hpp`` to depend on the file name
argument of ``JSON_FILE_MACRO``::
// my_class.hpp
class My_Class : public QObject
{
Q_OBJECT
OBJ_JSON_FILE ( "DEP.json" )
JSON_FILE_MACRO ( "info.json" )
...
};
In ``CMakeLists.txt`` we add a filter to
:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS` like this::
list( APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
"JSON_FILE_MACRO"
"[\n][ \t]*JSON_FILE_MACRO[ \t]*\\([ \t]*\"([^\"]+)\""
)
We assume ``info.json`` is a plain (not :prop_sf:`GENERATED`) file that is
listed in the target's source. Therefore we do not need to add it to
:prop_tgt:`AUTOGEN_TARGET_DEPENDS`.
Example 2
^^^^^^^^^
In the target ``my_target`` a header file ``complex_class.hpp`` uses a
custom macro ``JSON_BASED_CLASS`` which is defined in an other header
``macros.hpp``::
// macros.hpp
...
#define JSON_BASED_CLASS(name, json) \
class name : public QObject \
{ \
Q_OBJECT \
Q_PLUGIN_METADATA(IID "demo" FILE json) \
name() {} \
};
...
::
Then we might use :variable:`CMAKE_AUTOMOC_DEPEND_FILTERS` to
define a filter like this::
// complex_class.hpp
#pragma once
JSON_BASED_CLASS(Complex_Class, "meta.json")
// end of file
set(CMAKE_AUTOMOC_DEPEND_FILTERS
"OBJ_JSON_FILE" "[\n][ \t]*OBJ_JSON_FILE[ \t]*\\([ \t]*\"([^\"]+)\""
Since ``complex_class.hpp`` doesn't contain a ``Q_OBJECT`` macro it would be
ignored by :prop_tgt:`AUTOMOC`. We change this by adding ``JSON_BASED_CLASS``
to :variable:`CMAKE_AUTOMOC_MACRO_NAMES`::
list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "JSON_BASED_CLASS")
We want the ``moc`` file of ``complex_class.hpp`` to depend on
``meta.json``. So we add a filter to
:variable:`CMAKE_AUTOMOC_DEPEND_FILTERS`::
list(APPEND CMAKE_AUTOMOC_DEPEND_FILTERS
"JSON_BASED_CLASS"
"[\n^][ \t]*JSON_BASED_CLASS[ \t]*\\([^,]*,[ \t]*\"([^\"]+)\""
)
Additionally we assume ``meta.json`` is :prop_sf:`GENERATED` which is
why we have to add it to :prop_tgt:`AUTOGEN_TARGET_DEPENDS`::
set_property(TARGET my_target APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "meta.json")

@ -13,6 +13,11 @@ as target sources at build time and invoke ``rcc`` accordingly.
This property is initialized by the value of the :variable:`CMAKE_AUTORCC`
variable if it is set when a target is created.
By default :prop_tgt:`AUTORCC` is processed inside a
:command:`custom command <add_custom_command>`.
If the ``.qrc`` file is :prop_sf:`GENERATED` though, a
:command:`custom target <add_custom_target>` is used instead.
Additional command line options for rcc can be set via the
:prop_sf:`AUTORCC_OPTIONS` source file property on the ``.qrc`` file.

@ -33,5 +33,8 @@ autouic targets together in an IDE, e.g. in MSVS.
Source files can be excluded from :prop_tgt:`AUTOUIC` processing by
enabling :prop_sf:`SKIP_AUTOUIC` or the broader :prop_sf:`SKIP_AUTOGEN`.
The number of parallel ``uic`` processes to start can be modified by
setting :prop_tgt:`AUTOGEN_PARALLEL`.
See the :manual:`cmake-qt(7)` manual for more information on using CMake
with Qt.

@ -8,4 +8,4 @@ build sources within the target. Use :prop_tgt:`COMPILE_DEFINITIONS`
to pass additional preprocessor definitions.
This property is deprecated. Use the :prop_tgt:`COMPILE_OPTIONS`
property or the command:`target_compile_options` command instead.
property or the :command:`target_compile_options` command instead.

@ -11,3 +11,7 @@ For instance:
.. code-block:: cmake
set_property(TARGET myexe PROPERTY CUDA_SEPARABLE_COMPILATION ON)
This property is initialized by the value of the
:variable:`CMAKE_CUDA_SEPARABLE_COMPILATION` variable if it is set when a
target is created.

@ -0,0 +1,22 @@
IMPORTED_GLOBAL
---------------
Indication of whether an :ref:`IMPORTED target <Imported Targets>` is
globally visible.
The boolean value of this property is True for targets created with the
``IMPORTED`` ``GLOBAL`` options to :command:`add_executable()` or
:command:`add_library()`. It is always False for targets built within the
project.
For targets created with the ``IMPORTED`` option to
:command:`add_executable()` or :command:`add_library()` but without the
additional option ``GLOBAL`` this is False, too. However, setting this
property for such a locally ``IMPORTED`` target to True promotes that
target to global scope. This promotion can only be done in the same
directory where that ``IMPORTED`` target was created in the first place.
Once an imported target has been made global, it cannot be changed back to
non-global. Therefore, if a project sets this property, it may only
provide a value of True. CMake will issue an error if the project tries to
set the property to a non-True value, even if the value was already False.

@ -2,7 +2,7 @@
------------------------
This property is implemented only when ``<LANG>`` is ``C``, ``CXX``,
or ``CUDA``.
``Fortran``, or ``CUDA``.
Specify a :ref:`;-list <CMake Language Lists>` containing a command line
for a compiler launching tool. The :ref:`Makefile Generators` and the

@ -4,5 +4,6 @@ LINK_FLAGS
Additional flags to use when linking this target.
The LINK_FLAGS property can be used to add extra flags to the link
step of a target. LINK_FLAGS_<CONFIG> will add to the configuration
<CONFIG>, for example, DEBUG, RELEASE, MINSIZEREL, RELWITHDEBINFO.
step of a target. :prop_tgt:`LINK_FLAGS_<CONFIG>` will add to the
configuration ``<CONFIG>``, for example, ``DEBUG``, ``RELEASE``,
``MINSIZEREL``, ``RELWITHDEBINFO``, ...

@ -5,7 +5,8 @@ Output name for target files.
This sets the base name for output files created for an executable or
library target. If not set, the logical target name is used by
default.
default during generation. The value is not set by default during
configuration.
Contents of ``OUTPUT_NAME`` and the variants listed below may use
:manual:`generator expressions <cmake-generator-expressions(7)>`.

@ -139,7 +139,8 @@ Modules
This is robust against unusual ways of labeling tests, provides much better
support for advanced features such as parameterized tests, and does not
require re-running CMake to discover added or removed tests within a test
executable.
executable. Note that a breaking change was made in CMake 3.10.3 to address
an ambiguity of the ``TIMEOUT`` keyword (see :ref:`Release Notes 3.10.3`).
* The :module:`InstallRequiredSystemLibraries` module gained support
for installing Intel compiler runtimes.
@ -267,3 +268,17 @@ Changes made since CMake 3.10.0 include the following.
* The :manual:`cmake-server(7)` ``codemodel`` response ``crossReferences``
field added by 3.10.0 has been dropped due to excessive memory usage.
Another approach will be needed to provide backtrace information.
.. _`Release Notes 3.10.3`:
3.10.3
------
* CMake 3.10.1 added a ``TIMEOUT`` option to :command:`gtest_discover_tests`
from the :module:`GoogleTest` module. That keyword clashed with the
``TIMEOUT`` test property, which is one of the common properties that
would be set with the command's ``PROPERTIES`` keyword, usually leading
to legal but unintended behavior. The keyword was changed to
``DISCOVERY_TIMEOUT`` in CMake 3.10.3 to address this problem. The
ambiguous behavior of the :command:`gtest_discover_tests` command's
``TIMEOUT`` keyword in 3.10.1 and 3.10.2 has not been preserved.

@ -0,0 +1,285 @@
CMake 3.11 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.10 include the following.
New Features
============
Platforms
---------
* TI C/C++ compilers are now supported by the :generator:`Ninja` generator.
Generators
----------
* The :generator:`CodeBlocks` extra generator learned to check a
:variable:`CMAKE_CODEBLOCKS_COMPILER_ID` variable for a custom
compiler identification value to place in the project file.
* The :ref:`Makefile Generators` and the :generator:`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 :variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* :ref:`Visual Studio Generators` learned to support the ``COMPILE_LANGUAGE``
:manual:`generator expression <cmake-generator-expressions(7)>` in
target-wide :prop_tgt:`COMPILE_DEFINITIONS`,
:prop_tgt:`INCLUDE_DIRECTORIES`, :prop_tgt:`COMPILE_OPTIONS`, and
:command:`file(GENERATE)`. See generator expression documentation
for caveats.
* The :generator:`Xcode` generator learned to support the ``COMPILE_LANGUAGE``
:manual:`generator expression <cmake-generator-expressions(7)>` in
target-wide :prop_tgt:`COMPILE_DEFINITIONS` and
:prop_tgt:`INCLUDE_DIRECTORIES`. It previously supported only
:prop_tgt:`COMPILE_OPTIONS` and :command:`file(GENERATE)`.
See generator expression documentation for caveats.
Commands
--------
* :command:`add_library` and :command:`add_executable` commands can now be
called without any sources and will not complain as long as sources are
added later via the :command:`target_sources` command.
* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands
gained ``NETRC`` and ``NETRC_FILE`` options to specify use of a
``.netrc`` file.
* The :command:`target_compile_definitions` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` property on
:ref:`Imported Targets`.
* The :command:`target_compile_features` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_FEATURES` property on :ref:`Imported Targets`.
* The :command:`target_compile_options` command learned to set the
:prop_tgt:`INTERFACE_COMPILE_OPTIONS` property on :ref:`Imported Targets`.
* The :command:`target_include_directories` command learned to set the
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` property on
:ref:`Imported Targets`.
* The :command:`target_sources` command learned to set the
:prop_tgt:`INTERFACE_SOURCES` property on :ref:`Imported Targets`.
* The :command:`target_link_libraries` command learned to set the
:prop_tgt:`INTERFACE_LINK_LIBRARIES` property on :ref:`Imported Targets`.
Variables
---------
* A :variable:`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
:generator:`Visual Studio 15 2017` generator to hold the
selected instance of Visual Studio persistently.
* A :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable was added
to enable setting of default permissions for directories created implicitly
during installation of files by :command:`install` and
:command:`file(INSTALL)`, e.g. during ``make install``.
* A :variable:`CMAKE_JOB_POOLS` variable was added specify a value to use for
the :prop_gbl:`JOB_POOLS` property. This enables control over build
parallelism with command line configuration parameters when using the Ninja
generator.
* The :variable:`CMAKE_NETRC` and :variable:`CMAKE_NETRC_FILE` variables
were added to specify use of a ``.netrc`` file by the
:command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands and
the :module:`ExternalProject` module.
* A :variable:`CMAKE_CUDA_SEPARABLE_COMPILATION` variable was added to
initialize the :prop_tgt:`CUDA_SEPARABLE_COMPILATION` target property
on targets when they are created.
Properties
----------
* The :prop_sf:`COMPILE_DEFINITIONS` source file property learned to support
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* A :prop_sf:`COMPILE_OPTIONS` source file property was added to manage list
of options to pass to the compiler.
* An :prop_tgt:`IMPORTED_GLOBAL` target property was added to indicate
whether an :ref:`IMPORTED target <Imported Targets>` is globally visible.
It is automatically set to a true value for targets created with the
``GLOBAL`` option to :command:`add_library` or :command:`add_executable`.
Additionally, project code may now *promote* a local imported target
to be globally visible by setting this property to ``TRUE``.
* An :prop_sf:`INCLUDE_DIRECTORIES` source file property was added to specify
list of preprocessor include file search directories.
* Source file properties :prop_sf:`VS_SHADER_DISABLE_OPTIMIZATIONS` and
:prop_sf:`VS_SHADER_ENABLE_DEBUG` have been added to specify more
details of ``.hlsl`` sources with :ref:`Visual Studio Generators`.
Modules
-------
* The :module:`CheckIncludeFiles` module :command:`CHECK_INCLUDE_FILES`
command gained a ``LANGUAGE`` option to specify whether to check using the
``C`` or ``CXX`` compiler.
* The :module:`CMakePackageConfigHelpers` module
:command:`write_basic_package_version_file` command learned a new
``SameMinorVersion`` mode for the ``COMPATIBILITY`` argument.
* The :module:`ExternalProject` module learned to substitute ``<DOWNLOAD_DIR>``
in comments, commands, working directory and byproducts.
* The :module:`ExternalProject` module gained ``NETRC`` and ``NETRC_FILE``
options to specify use of a ``.netrc`` file.
* A new :module:`FetchContent` module was added which supports populating
content at configure time using any of the download/update methods
supported by :command:`ExternalProject_Add`. This allows the content
to be used immediately during the configure stage, such as with
:command:`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 :module:`FindBLAS` and :module:`FindLAPACK` modules learned to support
`FLAME`_ ``blis`` and ``libflame``.
* The :module:`FindDoxygen` module :command:`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 :module:`FindIconv` module was added to locate iconv support.
* The :module:`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 :module:`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`_.
.. _`FLAME`: https://github.com/flame
.. _`JEP 313`: http://openjdk.java.net/jeps/313
Autogen
-------
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`, CMake now starts
multiple parallel ``moc`` or ``uic`` processes to reduce the build time.
A new :variable:`CMAKE_AUTOGEN_PARALLEL` variable and
:prop_tgt:`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 :command:`ctest_start` command no longer sets
:variable:`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 :variable:`CTEST_RUN_CURRENT_SCRIPT` to 0 at the
global scope still prevents the script from being re-run at the end.
CPack
-----
* :manual:`cpack(1)` gained ``--trace`` and ``--trace-expand`` options.
* The :module:`CPackIFW` module gained new
:variable:`CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR` variable to control
if the target directory should not be deleted when uninstalling.
* The :module:`CPackRPM` module learned to enable enforcing of execute
privileges on programs and shared libraries.
See :variable:`CPACK_RPM_INSTALL_WITH_EXEC` variable.
* A :variable:`CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable was added
which serves the same purpose during packaging (e.g. ``make package``) as the
:variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS` variable serves during
installation (e.g. ``make install``).
Other
-----
* :ref:`Alias Targets` may now alias :ref:`Imported Targets` that are
created with the ``GLOBAL`` option to :command:`add_library`.
* :ref:`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 :manual:`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 :manual:`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 :policy:`CMP0037` no longer reserves target names associated
with optional features, such as ``test`` and ``package``, unless
the corresponding feature is enabled.
* The :module:`FindOpenGL` module now prefers GLVND libraries if available.
See policy :policy:`CMP0072`.
* The minimum deployment target set in the
:variable:`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 :variable:`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 :generator:`Xcode` generator behavior of generating one project
file per :command:`project()` command may now be controlled with the
:variable:`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.
Updates
=======
Changes made since CMake 3.11.0 include the following.
3.11.1
------
* The :module:`CheckIncludeFile` module ``check_include_file`` macro,
:module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro,
and :module:`CheckIncludeFiles` module ``check_include_files`` macro
were taught to honor the ``CMAKE_REQUIRED_LIBRARIES`` variable in
CMake 3.11.0. This has been reverted due to changing behavior of
checks for existing projects. It may be restored in the future
with a policy for compatibility.

@ -66,7 +66,7 @@ Variables
Properties
----------
* :ref:`Visual Studio Generators` learned to support additonal
* :ref:`Visual Studio Generators` learned to support additional
target properties to customize projects for NVIDIA Nsight
Tegra Visual Studio Edition:

@ -111,7 +111,7 @@ Modules
* The :module:`ExternalProject` module learned to initialize Git submodules
recursively and also to initialize new submodules on updates. Use the
``GIT_SUBMODULES`` option to restrict which submodules are initalized and
``GIT_SUBMODULES`` option to restrict which submodules are initialized and
updated.
* The :module:`ExternalProject` module leared the ``DOWNLOAD_NO_EXTRACT 1``

@ -237,7 +237,7 @@ CPack
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands gained a new
``USER_INTERFACES`` option to add a list of additonal pages to the IFW
``USER_INTERFACES`` option to add a list of additional pages to the IFW
installer.
* The :module:`CPackRPM` module learned to generate debuginfo

@ -13,6 +13,7 @@ Releases
.. toctree::
:maxdepth: 1
3.11 <3.11>
3.10 <3.10>
3.9 <3.9>
3.8 <3.8>

@ -0,0 +1,10 @@
CMAKE_AUTOGEN_PARALLEL
----------------------
Number of parallel ``moc`` or ``uic`` processes to start when using
:prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`.
This variable is used to initialize the :prop_tgt:`AUTOGEN_PARALLEL` property
on all the targets. See that target property for additional information.
By default :variable:`CMAKE_AUTOGEN_PARALLEL` is unset.

@ -12,7 +12,7 @@ information.
The default value is ``Q_OBJECT;Q_GADGET;Q_NAMESPACE``.
Example
-------
^^^^^^^
Let CMake know that source files that contain ``CUSTOM_MACRO`` must be ``moc``
processed as well::

@ -5,7 +5,7 @@ Specifies the build type on single-configuration generators.
This statically specifies what build type (configuration) will be
built in this build tree. Possible values are empty, ``Debug``, ``Release``,
``RelWithDebInfo`` and ``MinSizeRel``. This variable is only meaningful to
``RelWithDebInfo``, ``MinSizeRel``, ... This variable is only meaningful to
single-configuration generators (such as :ref:`Makefile Generators` and
:generator:`Ninja`) i.e. those which choose a single configuration when CMake
runs to generate a build tree as opposed to multi-configuration generators
@ -13,7 +13,7 @@ which offer selection of the build configuration within the generated build
environment. There are many per-config properties and variables
(usually following clean ``SOME_VAR_<CONFIG>`` order conventions), such as
``CMAKE_C_FLAGS_<CONFIG>``, specified as uppercase:
``CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL]``. For example,
``CMAKE_C_FLAGS_[DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|...]``. For example,
in a build tree configured to build type ``Debug``, CMake will see to
having :variable:`CMAKE_C_FLAGS_DEBUG <CMAKE_<LANG>_FLAGS_DEBUG>` settings get
added to the :variable:`CMAKE_C_FLAGS <CMAKE_<LANG>_FLAGS>` settings. See

@ -0,0 +1,13 @@
CMAKE_CODEBLOCKS_COMPILER_ID
----------------------------
Change the compiler id in the generated CodeBlocks project files.
CodeBlocks uses its own compiler id string which differs from
:variable:`CMAKE_<LANG>_COMPILER_ID`. If this variable is left empty,
CMake tries to recognize the CodeBlocks compiler id automatically.
Otherwise the specified string is used in the CodeBlocks project file.
See the CodeBlocks documentation for valid compiler id strings.
Other IDEs like QtCreator that also use the CodeBlocks generator may ignore
this setting.

@ -1,8 +1,26 @@
CMAKE_CROSSCOMPILING
--------------------
Is CMake currently cross compiling.
Intended to indicate whether CMake is cross compiling, but note limitations
discussed below.
This variable will be set to true by CMake if CMake is cross
compiling. Specifically if the build platform is different from the
target platform.
This variable will be set to true by CMake if the :variable:`CMAKE_SYSTEM_NAME`
variable has been set manually (i.e. in a toolchain file or as a cache entry
from the :manual:`cmake <cmake(1)>` command line). In most cases, manually
setting :variable:`CMAKE_SYSTEM_NAME` will only be done when cross compiling,
since it will otherwise be given the same value as
:variable:`CMAKE_HOST_SYSTEM_NAME` if not manually set, which is correct for
the non-cross-compiling case. In the event that :variable:`CMAKE_SYSTEM_NAME`
is manually set to the same value as :variable:`CMAKE_HOST_SYSTEM_NAME`, then
``CMAKE_CROSSCOMPILING`` will still be set to true.
Another case to be aware of is that builds targeting Apple platforms other than
macOS are handled differently to other cross compiling scenarios. Rather than
relying on :variable:`CMAKE_SYSTEM_NAME` to select the target platform, Apple
device builds use :variable:`CMAKE_OSX_SYSROOT` to select the appropriate SDK,
which indirectly determines the target platform. Furthermore, when using the
Xcode generator, developers can switch between device and simulator builds at
build time rather than having a single choice at configure time, so the concept
of whether the build is cross compiling or not is more complex. Therefore, the
use of ``CMAKE_CROSSCOMPILING`` is not recommended for projects targeting Apple
devices.

@ -0,0 +1,6 @@
CMAKE_CUDA_SEPARABLE_COMPILATION
--------------------------------
Default value for :prop_tgt:`CUDA_SEPARABLE_COMPILATION` target property.
This variable is used to initialize the property on each target as it is
created.

@ -4,7 +4,7 @@ CMAKE_EXTRA_GENERATOR
The extra generator used to build the project. See
:manual:`cmake-generators(7)`.
When using the Eclipse, CodeBlocks or KDevelop generators, CMake
When using the Eclipse, CodeBlocks, CodeLite, Kate or Sublime generators, CMake
generates Makefiles (:variable:`CMAKE_GENERATOR`) and additionally project
files for the respective IDE. This IDE project file generator is stored in
``CMAKE_EXTRA_GENERATOR`` (e.g. ``Eclipse CDT4``).

@ -0,0 +1,24 @@
CMAKE_GENERATOR_INSTANCE
------------------------
Generator-specific instance specification provided by user.
Some CMake generators support selection of an instance of the native build
system when multiple instances are available. If the user specifies an
instance (e.g. by setting this cache entry), or after a default instance is
chosen when a build tree is first configured, the value will be available in
this variable.
The value of this variable should never be modified by project code.
A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
variable may initialize ``CMAKE_GENERATOR_INSTANCE`` as a cache entry.
Once a given build tree has been initialized with a particular value
for this variable, changing the value has undefined behavior.
Instance specification is supported only on specific generators:
* For the :generator:`Visual Studio 15 2017` generator (and above)
this specifies the absolute path to the VS installation directory
of the selected VS instance.
See native build system documentation for allowed instance values.

@ -1,7 +1,7 @@
CMAKE_INCLUDE_CURRENT_DIR
-------------------------
Automatically add the current source- and build directories to the include path.
Automatically add the current source and build directories to the include path.
If this variable is enabled, CMake automatically adds
:variable:`CMAKE_CURRENT_SOURCE_DIR` and :variable:`CMAKE_CURRENT_BINARY_DIR`

@ -1,7 +1,7 @@
CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE
--------------------------------------
Automatically add the current source- and build directories to the
Automatically add the current source and build directories to the
:prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target property.
If this variable is enabled, CMake automatically adds for each shared

@ -0,0 +1,29 @@
CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
-------------------------------------------
Default permissions for directories created implicitly during installation
of files by :command:`install` and :command:`file(INSTALL)`.
If ``make install`` is invoked and directories are implicitly created they
get permissions set by :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`
variable or platform specific default permissions if the variable is not set.
Implicitly created directories are created if they are not explicitly installed
by :command:`install` command but are needed to install a file on a certain
path. Example of such locations are directories created due to the setting of
:variable:`CMAKE_INSTALL_PREFIX`.
Expected content of the :variable:`CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS`
variable is a list of permissions that can be used by :command:`install` command
`PERMISSIONS` section.
Example usage:
::
set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
OWNER_READ
OWNER_WRITE
OWNER_EXECUTE
GROUP_READ
)

@ -0,0 +1,6 @@
CMAKE_JOB_POOLS
---------------
If the :prop_gbl:`JOB_POOLS` global property is not set, the value
of this variable is used in its place. See :prop_gbl:`JOB_POOLS`
for additional information.

@ -6,7 +6,7 @@ The external toolchain for cross-compiling, if supported.
Some compiler toolchains do not ship their own auxiliary utilities such as
archivers and linkers. The compiler driver may support a command-line argument
to specify the location of such tools.
``CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN`` may be set to a path to a path to
``CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN`` may be set to a path to
the external toolchain and will be passed to the compiler driver if supported.
This variable may only be set in a toolchain file specified by

@ -3,4 +3,5 @@ CMAKE_<LANG>_COMPILER_LAUNCHER
Default value for :prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property.
This variable is used to initialize the property on each target as it is
created. This is done only when ``<LANG>`` is ``C``, ``CXX``, or ``CUDA``.
created. This is done only when ``<LANG>`` is ``C``, ``CXX``, ``Fortran``,
or ``CUDA``.

@ -0,0 +1,4 @@
CMAKE_<LANG>_FLAGS_<CONFIG>
---------------------------
Flags for language ``<LANG>`` when building for the ``<CONFIG>`` configuration.

@ -0,0 +1,10 @@
CMAKE_<LANG>_FLAGS_<CONFIG>_INIT
--------------------------------
Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` cache
entry the first time a build tree is configured for language ``<LANG>``.
This variable is meant to be set by a :variable:`toolchain file
<CMAKE_TOOLCHAIN_FILE>`. CMake may prepend or append content to
the value based on the environment and target platform.
See also :variable:`CMAKE_<LANG>_FLAGS_INIT`.

@ -1,6 +1,5 @@
CMAKE_<LANG>_FLAGS_DEBUG
------------------------
Flags for ``Debug`` build type or configuration.
``<LANG>`` flags used when :variable:`CMAKE_BUILD_TYPE` is ``Debug``.
This variable is the ``Debug`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variable.

@ -1,10 +1,5 @@
CMAKE_<LANG>_FLAGS_DEBUG_INIT
-----------------------------
Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS_DEBUG` cache
entry the first time a build tree is configured for language ``<LANG>``.
This variable is meant to be set by a :variable:`toolchain file
<CMAKE_TOOLCHAIN_FILE>`. CMake may prepend or append content to
the value based on the environment and target platform.
See also :variable:`CMAKE_<LANG>_FLAGS_INIT`.
This variable is the ``Debug`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.

@ -7,9 +7,5 @@ This variable is meant to be set by a :variable:`toolchain file
<CMAKE_TOOLCHAIN_FILE>`. CMake may prepend or append content to
the value based on the environment and target platform.
See also the configuration-specific variables:
* :variable:`CMAKE_<LANG>_FLAGS_DEBUG_INIT`
* :variable:`CMAKE_<LANG>_FLAGS_RELEASE_INIT`
* :variable:`CMAKE_<LANG>_FLAGS_MINSIZEREL_INIT`
* :variable:`CMAKE_<LANG>_FLAGS_RELWITHDEBINFO_INIT`
See also the configuration-specific
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.

@ -1,7 +1,5 @@
CMAKE_<LANG>_FLAGS_MINSIZEREL
-----------------------------
Flags for ``MinSizeRel`` build type or configuration.
``<LANG>`` flags used when :variable:`CMAKE_BUILD_TYPE` is ``MinSizeRel``
(short for minimum size release).
This variable is the ``MinSizeRel`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variable.

@ -1,10 +1,5 @@
CMAKE_<LANG>_FLAGS_MINSIZEREL_INIT
----------------------------------
Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS_MINSIZEREL`
cache entry the first time a build tree is configured for language ``<LANG>``.
This variable is meant to be set by a :variable:`toolchain file
<CMAKE_TOOLCHAIN_FILE>`. CMake may prepend or append content to
the value based on the environment and target platform.
See also :variable:`CMAKE_<LANG>_FLAGS_INIT`.
This variable is the ``MinSizeRel`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.

@ -1,6 +1,5 @@
CMAKE_<LANG>_FLAGS_RELEASE
--------------------------
Flags for ``Release`` build type or configuration.
``<LANG>`` flags used when :variable:`CMAKE_BUILD_TYPE` is ``Release``.
This variable is the ``Release`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variable.

@ -1,10 +1,5 @@
CMAKE_<LANG>_FLAGS_RELEASE_INIT
-------------------------------
Value used to initialize the :variable:`CMAKE_<LANG>_FLAGS_RELEASE`
cache entry the first time a build tree is configured for language ``<LANG>``.
This variable is meant to be set by a :variable:`toolchain file
<CMAKE_TOOLCHAIN_FILE>`. CMake may prepend or append content to
the value based on the environment and target platform.
See also :variable:`CMAKE_<LANG>_FLAGS_INIT`.
This variable is the ``Release`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>_INIT` variable.

@ -1,7 +1,5 @@
CMAKE_<LANG>_FLAGS_RELWITHDEBINFO
---------------------------------
Flags for ``RelWithDebInfo`` type or configuration.
``<LANG>`` flags used when :variable:`CMAKE_BUILD_TYPE` is ``RelWithDebInfo``
(short for Release With Debug Information).
This variable is the ``RelWithDebInfo`` variant of the
:variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` variable.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save