diff options
author | Joachim Wuttke (l) <j.wuttke@fz-juelich.de> | 2018-11-12 22:07:59 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-11-13 18:47:26 (GMT) |
commit | abb5945bd0b10b14cdc43966145b1a34125393cc (patch) | |
tree | e4d930edf14ad52ea4b5146bbd1b6b077320b4b4 /Help | |
parent | 357cdee3a133a943828d85d6441dfdee9d347751 (diff) | |
download | CMake-abb5945bd0b10b14cdc43966145b1a34125393cc.zip CMake-abb5945bd0b10b14cdc43966145b1a34125393cc.tar.gz CMake-abb5945bd0b10b14cdc43966145b1a34125393cc.tar.bz2 |
Help: Document that function invocation is case-insensitive
Diffstat (limited to 'Help')
-rw-r--r-- | Help/command/function.rst | 67 |
1 files changed, 46 insertions, 21 deletions
diff --git a/Help/command/function.rst b/Help/command/function.rst index 4a223b4..7b10381 100644 --- a/Help/command/function.rst +++ b/Help/command/function.rst @@ -9,27 +9,9 @@ Start recording a function for later invocation as a command. <commands> endfunction() -Defines a function named ``<name>`` that takes arguments -named ``<arg1>``, ... -The ``<commands>`` in the function definition are recorded; -they are not invoked until the function is invoked. When -the function is invoked, the recorded ``<commands>`` are first -modified by replacing formal parameters (``${arg1}``, ...) -with the arguments passed, and then invoked as normal commands. - -In addition to referencing the formal parameters you can reference the -``ARGC`` variable which will be set to the number of arguments passed -into the function as well as ``ARGV0``, ``ARGV1``, ``ARGV2``, ... which -will have the actual values of the arguments passed in. -This facilitates creating functions with optional arguments. - -Furthermore, ``ARGV`` holds the list of all arguments given to the -function and ``ARGN`` holds the list of arguments past the last expected -argument. -Referencing to ``ARGV#`` arguments beyond ``ARGC`` have undefined -behavior. Checking that ``ARGC`` is greater than ``#`` is the only way -to ensure that ``ARGV#`` was passed to the function as an extra -argument. +Defines a function named ``<name>`` that takes arguments named +``<arg1>``, ... The ``<commands>`` in the function definition +are recorded; they are not executed until the function is invoked. Per legacy, the :command:`endfunction` command admits an optional ``<name>`` argument. If used, it must be a verbatim repeat of the @@ -40,3 +22,46 @@ details. See the :command:`cmake_policy()` command documentation for the behavior of policies inside functions. + +Invocation +^^^^^^^^^^ + +The function invocation is case-insensitive. A function defined as + +.. code-block:: cmake + + function(foo) + <commands> + endfunction() + +can be invoked through any of + +.. code-block:: cmake + + foo() + Foo() + FOO() + +and so on. However, it is strongly recommended to stay with the +case chosen in the function definition. Typically functions use +all-lowercase names. + +Arguments +^^^^^^^^^ + +When the function is invoked, the recorded ``<commands>`` are first +modified by replacing formal parameters (``${arg1}``, ...) with the +arguments passed, and then invoked as normal commands. + +In addition to referencing the formal parameters you can reference the +``ARGC`` variable which will be set to the number of arguments passed +into the function as well as ``ARGV0``, ``ARGV1``, ``ARGV2``, ... which +will have the actual values of the arguments passed in. This facilitates +creating functions with optional arguments. + +Furthermore, ``ARGV`` holds the list of all arguments given to the +function and ``ARGN`` holds the list of arguments past the last expected +argument. Referencing to ``ARGV#`` arguments beyond ``ARGC`` have +undefined behavior. Checking that ``ARGC`` is greater than ``#`` is +the only way to ensure that ``ARGV#`` was passed to the function as an +extra argument. |