diff options
Diffstat (limited to 'share/cmake-3.10/Help/manual/cmake-language.7.rst')
-rw-r--r-- | share/cmake-3.10/Help/manual/cmake-language.7.rst | 580 |
1 files changed, 0 insertions, 580 deletions
diff --git a/share/cmake-3.10/Help/manual/cmake-language.7.rst b/share/cmake-3.10/Help/manual/cmake-language.7.rst deleted file mode 100644 index 87f8f9d..0000000 --- a/share/cmake-3.10/Help/manual/cmake-language.7.rst +++ /dev/null @@ -1,580 +0,0 @@ -.. cmake-manual-description: CMake Language Reference - -cmake-language(7) -***************** - -.. only:: html - - .. contents:: - -Organization -============ - -CMake input files are written in the "CMake Language" in source files -named ``CMakeLists.txt`` or ending in a ``.cmake`` file name extension. - -CMake Language source files in a project are organized into: - -* `Directories`_ (``CMakeLists.txt``), -* `Scripts`_ (``<script>.cmake``), and -* `Modules`_ (``<module>.cmake``). - -Directories ------------ - -When CMake processes a project source tree, the entry point is -a source file called ``CMakeLists.txt`` in the top-level source -directory. This file may contain the entire build specification -or use the :command:`add_subdirectory` command to add subdirectories -to the build. Each subdirectory added by the command must also -contain a ``CMakeLists.txt`` file as the entry point to that -directory. For each source directory whose ``CMakeLists.txt`` file -is processed CMake generates a corresponding directory in the build -tree to act as the default working and output directory. - -Scripts -------- - -An individual ``<script>.cmake`` source file may be processed -in *script mode* by using the :manual:`cmake(1)` command-line tool -with the ``-P`` option. Script mode simply runs the commands in -the given CMake Language source file and does not generate a -build system. It does not allow CMake commands that define build -targets or actions. - -Modules -------- - -CMake Language code in either `Directories`_ or `Scripts`_ may -use the :command:`include` command to load a ``<module>.cmake`` -source file in the scope of the including context. -See the :manual:`cmake-modules(7)` manual page for documentation -of modules included with the CMake distribution. -Project source trees may also provide their own modules and -specify their location(s) in the :variable:`CMAKE_MODULE_PATH` -variable. - -Syntax -====== - -.. _`CMake Language Encoding`: - -Encoding --------- - -A CMake Language source file may be written in 7-bit ASCII text for -maximum portability across all supported platforms. Newlines may be -encoded as either ``\n`` or ``\r\n`` but will be converted to ``\n`` -as input files are read. - -Note that the implementation is 8-bit clean so source files may -be encoded as UTF-8 on platforms with system APIs supporting this -encoding. In addition, CMake 3.2 and above support source files -encoded in UTF-8 on Windows (using UTF-16 to call system APIs). -Furthermore, CMake 3.0 and above allow a leading UTF-8 -`Byte-Order Mark`_ in source files. - -.. _`Byte-Order Mark`: http://en.wikipedia.org/wiki/Byte_order_mark - -Source Files ------------- - -A CMake Language source file consists of zero or more -`Command Invocations`_ separated by newlines and optionally -spaces and `Comments`_: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - file: `file_element`* - file_element: `command_invocation` `line_ending` | - : (`bracket_comment`|`space`)* `line_ending` - line_ending: `line_comment`? `newline` - space: <match '[ \t]+'> - newline: <match '\n'> - -.. raw:: latex - - \end{small} - -Note that any source file line not inside `Command Arguments`_ or -a `Bracket Comment`_ can end in a `Line Comment`_. - -.. _`Command Invocations`: - -Command Invocations -------------------- - -A *command invocation* is a name followed by paren-enclosed arguments -separated by whitespace: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - command_invocation: `space`* `identifier` `space`* '(' `arguments` ')' - identifier: <match '[A-Za-z_][A-Za-z0-9_]*'> - arguments: `argument`? `separated_arguments`* - separated_arguments: `separation`+ `argument`? | - : `separation`* '(' `arguments` ')' - separation: `space` | `line_ending` - -.. raw:: latex - - \end{small} - -For example: - -.. code-block:: cmake - - add_executable(hello world.c) - -Command names are case-insensitive. -Nested unquoted parentheses in the arguments must balance. -Each ``(`` or ``)`` is given to the command invocation as -a literal `Unquoted Argument`_. This may be used in calls -to the :command:`if` command to enclose conditions. -For example: - -.. code-block:: cmake - - if(FALSE AND (FALSE OR TRUE)) # evaluates to FALSE - -.. note:: - CMake versions prior to 3.0 require command name identifiers - to be at least 2 characters. - - CMake versions prior to 2.8.12 silently accept an `Unquoted Argument`_ - or a `Quoted Argument`_ immediately following a `Quoted Argument`_ and - not separated by any whitespace. For compatibility, CMake 2.8.12 and - higher accept such code but produce a warning. - -Command Arguments ------------------ - -There are three types of arguments within `Command Invocations`_: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - argument: `bracket_argument` | `quoted_argument` | `unquoted_argument` - -.. raw:: latex - - \end{small} - -.. _`Bracket Argument`: - -Bracket Argument -^^^^^^^^^^^^^^^^ - -A *bracket argument*, inspired by `Lua`_ long bracket syntax, -encloses content between opening and closing "brackets" of the -same length: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - bracket_argument: `bracket_open` `bracket_content` `bracket_close` - bracket_open: '[' '='* '[' - bracket_content: <any text not containing a `bracket_close` with - : the same number of '=' as the `bracket_open`> - bracket_close: ']' '='* ']' - -.. raw:: latex - - \end{small} - -An opening bracket is written ``[`` followed by zero or more ``=`` followed -by ``[``. The corresponding closing bracket is written ``]`` followed -by the same number of ``=`` followed by ``]``. -Brackets do not nest. A unique length may always be chosen -for the opening and closing brackets to contain closing brackets -of other lengths. - -Bracket argument content consists of all text between the opening -and closing brackets, except that one newline immediately following -the opening bracket, if any, is ignored. No evaluation of the -enclosed content, such as `Escape Sequences`_ or `Variable References`_, -is performed. A bracket argument is always given to the command -invocation as exactly one argument. - -For example: - -.. code-block:: cmake - - message([=[ - This is the first line in a bracket argument with bracket length 1. - No \-escape sequences or ${variable} references are evaluated. - This is always one argument even though it contains a ; character. - The text does not end on a closing bracket of length 0 like ]]. - It does end in a closing bracket of length 1. - ]=]) - -.. note:: - CMake versions prior to 3.0 do not support bracket arguments. - They interpret the opening bracket as the start of an - `Unquoted Argument`_. - -.. _`Lua`: http://www.lua.org/ - -.. _`Quoted Argument`: - -Quoted Argument -^^^^^^^^^^^^^^^ - -A *quoted argument* encloses content between opening and closing -double-quote characters: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - quoted_argument: '"' `quoted_element`* '"' - quoted_element: <any character except '\' or '"'> | - : `escape_sequence` | - : `quoted_continuation` - quoted_continuation: '\' `newline` - -.. raw:: latex - - \end{small} - -Quoted argument content consists of all text between opening and -closing quotes. Both `Escape Sequences`_ and `Variable References`_ -are evaluated. A quoted argument is always given to the command -invocation as exactly one argument. - -For example: - -:: - - message("This is a quoted argument containing multiple lines. - This is always one argument even though it contains a ; character. - Both \\-escape sequences and ${variable} references are evaluated. - The text does not end on an escaped double-quote like \". - It does end in an unescaped double quote. - ") - -The final ``\`` on any line ending in an odd number of backslashes -is treated as a line continuation and ignored along with the -immediately following newline character. For example: - -.. code-block:: cmake - - message("\ - This is the first line of a quoted argument. \ - In fact it is the only line but since it is long \ - the source code uses line continuation.\ - ") - -.. note:: - CMake versions prior to 3.0 do not support continuation with ``\``. - They report errors in quoted arguments containing lines ending in - an odd number of ``\`` characters. - -.. _`Unquoted Argument`: - -Unquoted Argument -^^^^^^^^^^^^^^^^^ - -An *unquoted argument* is not enclosed by any quoting syntax. -It may not contain any whitespace, ``(``, ``)``, ``#``, ``"``, or ``\`` -except when escaped by a backslash: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - unquoted_argument: `unquoted_element`+ | `unquoted_legacy` - unquoted_element: <any character except whitespace or one of '()#"\'> | - : `escape_sequence` - unquoted_legacy: <see note in text> - -.. raw:: latex - - \end{small} - -Unquoted argument content consists of all text in a contiguous block -of allowed or escaped characters. Both `Escape Sequences`_ and -`Variable References`_ are evaluated. The resulting value is divided -in the same way `Lists`_ divide into elements. Each non-empty element -is given to the command invocation as an argument. Therefore an -unquoted argument may be given to a command invocation as zero or -more arguments. - -For example: - -.. code-block:: cmake - - foreach(arg - NoSpace - Escaped\ Space - This;Divides;Into;Five;Arguments - Escaped\;Semicolon - ) - message("${arg}") - endforeach() - -.. note:: - To support legacy CMake code, unquoted arguments may also contain - double-quoted strings (``"..."``, possibly enclosing horizontal - whitespace), and make-style variable references (``$(MAKEVAR)``). - - Unescaped double-quotes must balance, may not appear at the - beginning of an unquoted argument, and are treated as part of the - content. For example, the unquoted arguments ``-Da="b c"``, - ``-Da=$(v)``, and ``a" "b"c"d`` are each interpreted literally. - They may instead be written as quoted arguments ``"-Da=\"b c\""``, - ``"-Da=$(v)"``, and ``"a\" \"b\"c\"d"``, respectively. - - Make-style references are treated literally as part of the content - and do not undergo variable expansion. They are treated as part - of a single argument (rather than as separate ``$``, ``(``, - ``MAKEVAR``, and ``)`` arguments). - - The above "unquoted_legacy" production represents such arguments. - We do not recommend using legacy unquoted arguments in new code. - Instead use a `Quoted Argument`_ or a `Bracket Argument`_ to - represent the content. - -.. _`Escape Sequences`: - -Escape Sequences ----------------- - -An *escape sequence* is a ``\`` followed by one character: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - escape_sequence: `escape_identity` | `escape_encoded` | `escape_semicolon` - escape_identity: '\' <match '[^A-Za-z0-9;]'> - escape_encoded: '\t' | '\r' | '\n' - escape_semicolon: '\;' - -.. raw:: latex - - \end{small} - -A ``\`` followed by a non-alphanumeric character simply encodes the literal -character without interpreting it as syntax. A ``\t``, ``\r``, or ``\n`` -encodes a tab, carriage return, or newline character, respectively. A ``\;`` -outside of any `Variable References`_ encodes itself but may be used in an -`Unquoted Argument`_ to encode the ``;`` without dividing the argument -value on it. A ``\;`` inside `Variable References`_ encodes the literal -``;`` character. (See also policy :policy:`CMP0053` documentation for -historical considerations.) - -.. _`Variable References`: - -Variable References -------------------- - -A *variable reference* has the form ``${variable_name}`` and is -evaluated inside a `Quoted Argument`_ or an `Unquoted Argument`_. -A variable reference is replaced by the value of the variable, -or by the empty string if the variable is not set. -Variable references can nest and are evaluated from the -inside out, e.g. ``${outer_${inner_variable}_variable}``. - -Literal variable references may consist of alphanumeric characters, -the characters ``/_.+-``, and `Escape Sequences`_. Nested references -may be used to evaluate variables of any name. (See also policy -:policy:`CMP0053` documentation for historical considerations.) - -The `Variables`_ section documents the scope of variable names -and how their values are set. - -An *environment variable reference* has the form ``$ENV{VAR}`` and -is evaluated in the same contexts as a normal variable reference. - -Comments --------- - -A comment starts with a ``#`` character that is not inside a -`Bracket Argument`_, `Quoted Argument`_, or escaped with ``\`` -as part of an `Unquoted Argument`_. There are two types of -comments: a `Bracket Comment`_ and a `Line Comment`_. - -.. _`Bracket Comment`: - -Bracket Comment -^^^^^^^^^^^^^^^ - -A ``#`` immediately followed by a `Bracket Argument`_ forms a -*bracket comment* consisting of the entire bracket enclosure: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - bracket_comment: '#' `bracket_argument` - -.. raw:: latex - - \end{small} - -For example: - -:: - - #[[This is a bracket comment. - It runs until the close bracket.]] - message("First Argument\n" #[[Bracket Comment]] "Second Argument") - -.. note:: - CMake versions prior to 3.0 do not support bracket comments. - They interpret the opening ``#`` as the start of a `Line Comment`_. - -.. _`Line Comment`: - -Line Comment -^^^^^^^^^^^^ - -A ``#`` not immediately followed by a `Bracket Argument`_ forms a -*line comment* that runs until the end of the line: - -.. raw:: latex - - \begin{small} - -.. productionlist:: - line_comment: '#' <any text not starting in a `bracket_argument` - : and not containing a `newline`> - -.. raw:: latex - - \end{small} - -For example: - -.. code-block:: cmake - - # This is a line comment. - message("First Argument\n" # This is a line comment :) - "Second Argument") # This is a line comment. - -Control Structures -================== - -Conditional Blocks ------------------- - -The :command:`if`/:command:`elseif`/:command:`else`/:command:`endif` -commands delimit code blocks to be executed conditionally. - -Loops ------ - -The :command:`foreach`/:command:`endforeach` and -:command:`while`/:command:`endwhile` commands delimit code -blocks to be executed in a loop. Inside such blocks the -:command:`break` command may be used to terminate the loop -early whereas the :command:`continue` command may be used -to start with the next iteration immediately. - -Command Definitions -------------------- - -The :command:`macro`/:command:`endmacro`, and -:command:`function`/:command:`endfunction` commands delimit -code blocks to be recorded for later invocation as commands. - -.. _`CMake Language Variables`: - -Variables -========= - -Variables are the basic unit of storage in the CMake Language. -Their values are always of string type, though some commands may -interpret the strings as values of other types. -The :command:`set` and :command:`unset` commands explicitly -set or unset a variable, but other commands have semantics -that modify variables as well. -Variable names are case-sensitive and may consist of almost -any text, but we recommend sticking to names consisting only -of alphanumeric characters plus ``_`` and ``-``. - -Variables have dynamic scope. Each variable "set" or "unset" -creates a binding in the current scope: - -Function Scope - `Command Definitions`_ created by the :command:`function` command - create commands that, when invoked, process the recorded commands - in a new variable binding scope. A variable "set" or "unset" - binds in this scope and is visible for the current function and - any nested calls within it, but not after the function returns. - -Directory Scope - Each of the `Directories`_ in a source tree has its own variable - bindings. Before processing the ``CMakeLists.txt`` file for a - directory, CMake copies all variable bindings currently defined - in the parent directory, if any, to initialize the new directory - scope. CMake `Scripts`_, when processed with ``cmake -P``, bind - variables in one "directory" scope. - - A variable "set" or "unset" not inside a function call binds - to the current directory scope. - -Persistent Cache - CMake stores a separate set of "cache" variables, or "cache entries", - whose values persist across multiple runs within a project build - tree. Cache entries have an isolated binding scope modified only - by explicit request, such as by the ``CACHE`` option of the - :command:`set` and :command:`unset` commands. - -When evaluating `Variable References`_, CMake first searches the -function call stack, if any, for a binding and then falls back -to the binding in the current directory scope, if any. If a -"set" binding is found, its value is used. If an "unset" binding -is found, or no binding is found, CMake then searches for a -cache entry. If a cache entry is found, its value is used. -Otherwise, the variable reference evaluates to an empty string. - -The :manual:`cmake-variables(7)` manual documents many variables -that are provided by CMake or have meaning to CMake when set -by project code. - -.. _`CMake Language Lists`: - -Lists -===== - -Although all values in CMake are stored as strings, a string -may be treated as a list in certain contexts, such as during -evaluation of an `Unquoted Argument`_. In such contexts, a string -is divided into list elements by splitting on ``;`` characters not -following an unequal number of ``[`` and ``]`` characters and not -immediately preceded by a ``\``. The sequence ``\;`` does not -divide a value but is replaced by ``;`` in the resulting element. - -A list of elements is represented as a string by concatenating -the elements separated by ``;``. For example, the :command:`set` -command stores multiple values into the destination variable -as a list: - -.. code-block:: cmake - - set(srcs a.c b.c c.c) # sets "srcs" to "a.c;b.c;c.c" - -Lists are meant for simple use cases such as a list of source -files and should not be used for complex data processing tasks. -Most commands that construct lists do not escape ``;`` characters -in list elements, thus flattening nested lists: - -.. code-block:: cmake - - set(x a "b;c") # sets "x" to "a;b;c", not "a;b\;c" |