summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Woehlke <matthew.woehlke@kitware.com>2023-02-27 16:08:32 (GMT)
committerBrad King <brad.king@kitware.com>2023-03-06 14:52:12 (GMT)
commitcd33f461a668268c102075c5f1194c22f95c44a0 (patch)
tree090bc307a7952c19cc6d0620746029efc7b521bf
parent74e3c1d313616b5faf83ff423c8e8ef3f2010a41 (diff)
downloadCMake-cd33f461a668268c102075c5f1194c22f95c44a0.zip
CMake-cd33f461a668268c102075c5f1194c22f95c44a0.tar.gz
CMake-cd33f461a668268c102075c5f1194c22f95c44a0.tar.bz2
Help: Use signature directive for cmake_language command
-rw-r--r--Help/command/cmake_language.rst319
1 files changed, 153 insertions, 166 deletions
diff --git a/Help/command/cmake_language.rst b/Help/command/cmake_language.rst
index 8801a9f..707568c 100644
--- a/Help/command/cmake_language.rst
+++ b/Help/command/cmake_language.rst
@@ -27,163 +27,155 @@ those created via the :command:`macro` or :command:`function` commands.
Calling Commands
^^^^^^^^^^^^^^^^
-.. _CALL:
-
-.. code-block:: cmake
-
+.. signature::
cmake_language(CALL <command> [<arg>...])
-Calls the named ``<command>`` with the given arguments (if any).
-For example, the code:
+ Calls the named ``<command>`` with the given arguments (if any).
+ For example, the code:
-.. code-block:: cmake
+ .. code-block:: cmake
- set(message_command "message")
- cmake_language(CALL ${message_command} STATUS "Hello World!")
+ set(message_command "message")
+ cmake_language(CALL ${message_command} STATUS "Hello World!")
-is equivalent to
+ is equivalent to
-.. code-block:: cmake
+ .. code-block:: cmake
- message(STATUS "Hello World!")
+ message(STATUS "Hello World!")
-.. note::
- To ensure consistency of the code, the following commands are not allowed:
+ .. note::
+ To ensure consistency of the code, the following commands are not allowed:
- * ``if`` / ``elseif`` / ``else`` / ``endif``
- * ``block`` / ``endblock``
- * ``while`` / ``endwhile``
- * ``foreach`` / ``endforeach``
- * ``function`` / ``endfunction``
- * ``macro`` / ``endmacro``
+ * ``if`` / ``elseif`` / ``else`` / ``endif``
+ * ``block`` / ``endblock``
+ * ``while`` / ``endwhile``
+ * ``foreach`` / ``endforeach``
+ * ``function`` / ``endfunction``
+ * ``macro`` / ``endmacro``
Evaluating Code
^^^^^^^^^^^^^^^
-.. _EVAL:
-
-.. code-block:: cmake
-
+.. signature::
cmake_language(EVAL CODE <code>...)
+ :target: EVAL
-Evaluates the ``<code>...`` as CMake code.
+ Evaluates the ``<code>...`` as CMake code.
-For example, the code:
+ For example, the code:
-.. code-block:: cmake
+ .. code-block:: cmake
- set(A TRUE)
- set(B TRUE)
- set(C TRUE)
- set(condition "(A AND B) OR C")
+ set(A TRUE)
+ set(B TRUE)
+ set(C TRUE)
+ set(condition "(A AND B) OR C")
- cmake_language(EVAL CODE "
- if (${condition})
- message(STATUS TRUE)
- else()
- message(STATUS FALSE)
- endif()"
- )
+ cmake_language(EVAL CODE "
+ if (${condition})
+ message(STATUS TRUE)
+ else()
+ message(STATUS FALSE)
+ endif()"
+ )
-is equivalent to
+ is equivalent to
-.. code-block:: cmake
+ .. code-block:: cmake
- set(A TRUE)
- set(B TRUE)
- set(C TRUE)
- set(condition "(A AND B) OR C")
-
- file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/eval.cmake "
- if (${condition})
- message(STATUS TRUE)
- else()
- message(STATUS FALSE)
- endif()"
- )
+ set(A TRUE)
+ set(B TRUE)
+ set(C TRUE)
+ set(condition "(A AND B) OR C")
- include(${CMAKE_CURRENT_BINARY_DIR}/eval.cmake)
+ file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/eval.cmake "
+ if (${condition})
+ message(STATUS TRUE)
+ else()
+ message(STATUS FALSE)
+ endif()"
+ )
+
+ include(${CMAKE_CURRENT_BINARY_DIR}/eval.cmake)
Deferring Calls
^^^^^^^^^^^^^^^
.. versionadded:: 3.19
-.. _DEFER:
-
-.. code-block:: cmake
-
+.. signature::
cmake_language(DEFER <options>... CALL <command> [<arg>...])
-Schedules a call to the named ``<command>`` with the given arguments (if any)
-to occur at a later time. By default, deferred calls are executed as if
-written at the end of the current directory's ``CMakeLists.txt`` file,
-except that they run even after a :command:`return` call. Variable
-references in arguments are evaluated at the time the deferred call is
-executed.
+ Schedules a call to the named ``<command>`` with the given arguments (if any)
+ to occur at a later time. By default, deferred calls are executed as if
+ written at the end of the current directory's ``CMakeLists.txt`` file,
+ except that they run even after a :command:`return` call. Variable
+ references in arguments are evaluated at the time the deferred call is
+ executed.
-The options are:
+ The options are:
-``DIRECTORY <dir>``
- Schedule the call for the end of the given directory instead of the
- current directory. The ``<dir>`` may reference either a source
- directory or its corresponding binary directory. Relative paths are
- treated as relative to the current source directory.
+ ``DIRECTORY <dir>``
+ Schedule the call for the end of the given directory instead of the
+ current directory. The ``<dir>`` may reference either a source
+ directory or its corresponding binary directory. Relative paths are
+ treated as relative to the current source directory.
- The given directory must be known to CMake, being either the top-level
- directory or one added by :command:`add_subdirectory`. Furthermore,
- the given directory must not yet be finished processing. This means
- it can be the current directory or one of its ancestors.
+ The given directory must be known to CMake, being either the top-level
+ directory or one added by :command:`add_subdirectory`. Furthermore,
+ the given directory must not yet be finished processing. This means
+ it can be the current directory or one of its ancestors.
-``ID <id>``
- Specify an identification for the deferred call.
- The ``<id>`` may not be empty and may not begin with a capital letter ``A-Z``.
- The ``<id>`` may begin with an underscore (``_``) only if it was generated
- automatically by an earlier call that used ``ID_VAR`` to get the id.
+ ``ID <id>``
+ Specify an identification for the deferred call.
+ The ``<id>`` may not be empty and may not begin with a capital letter ``A-Z``.
+ The ``<id>`` may begin with an underscore (``_``) only if it was generated
+ automatically by an earlier call that used ``ID_VAR`` to get the id.
-``ID_VAR <var>``
- Specify a variable in which to store the identification for the
- deferred call. If ``ID <id>`` is not given, a new identification
- will be generated and the generated id will start with an underscore (``_``).
+ ``ID_VAR <var>``
+ Specify a variable in which to store the identification for the
+ deferred call. If ``ID <id>`` is not given, a new identification
+ will be generated and the generated id will start with an underscore (``_``).
-The currently scheduled list of deferred calls may be retrieved:
+ The currently scheduled list of deferred calls may be retrieved:
-.. code-block:: cmake
+ .. code-block:: cmake
- cmake_language(DEFER [DIRECTORY <dir>] GET_CALL_IDS <var>)
+ cmake_language(DEFER [DIRECTORY <dir>] GET_CALL_IDS <var>)
-This will store in ``<var>`` a :ref:`semicolon-separated list <CMake Language
-Lists>` of deferred call ids. The ids are for the directory scope in which
-the calls have been deferred to (i.e. where they will be executed), which can
-be different to the scope in which they were created. The ``DIRECTORY``
-option can be used to specify the scope for which to retrieve the call ids.
-If that option is not given, the call ids for the current directory scope will
-be returned.
+ This will store in ``<var>`` a :ref:`semicolon-separated list <CMake Language
+ Lists>` of deferred call ids. The ids are for the directory scope in which
+ the calls have been deferred to (i.e. where they will be executed), which can
+ be different to the scope in which they were created. The ``DIRECTORY``
+ option can be used to specify the scope for which to retrieve the call ids.
+ If that option is not given, the call ids for the current directory scope
+ will be returned.
-Details of a specific call may be retrieved from its id:
+ Details of a specific call may be retrieved from its id:
-.. code-block:: cmake
+ .. code-block:: cmake
- cmake_language(DEFER [DIRECTORY <dir>] GET_CALL <id> <var>)
+ cmake_language(DEFER [DIRECTORY <dir>] GET_CALL <id> <var>)
-This will store in ``<var>`` a :ref:`semicolon-separated list <CMake Language
-Lists>` in which the first element is the name of the command to be
-called, and the remaining elements are its unevaluated arguments (any
-contained ``;`` characters are included literally and cannot be distinguished
-from multiple arguments). If multiple calls are scheduled with the same id,
-this retrieves the first one. If no call is scheduled with the given id in
-the specified ``DIRECTORY`` scope (or the current directory scope if no
-``DIRECTORY`` option is given), this stores an empty string in the variable.
+ This will store in ``<var>`` a :ref:`semicolon-separated list <CMake Language
+ Lists>` in which the first element is the name of the command to be
+ called, and the remaining elements are its unevaluated arguments (any
+ contained ``;`` characters are included literally and cannot be distinguished
+ from multiple arguments). If multiple calls are scheduled with the same id,
+ this retrieves the first one. If no call is scheduled with the given id in
+ the specified ``DIRECTORY`` scope (or the current directory scope if no
+ ``DIRECTORY`` option is given), this stores an empty string in the variable.
-Deferred calls may be canceled by their id:
+ Deferred calls may be canceled by their id:
-.. code-block:: cmake
+ .. code-block:: cmake
- cmake_language(DEFER [DIRECTORY <dir>] CANCEL_CALL <id>...)
+ cmake_language(DEFER [DIRECTORY <dir>] CANCEL_CALL <id>...)
-This cancels all deferred calls matching any of the given ids in the specified
-``DIRECTORY`` scope (or the current directory scope if no ``DIRECTORY`` option
-is given). Unknown ids are silently ignored.
+ This cancels all deferred calls matching any of the given ids in the specified
+ ``DIRECTORY`` scope (or the current directory scope if no ``DIRECTORY`` option
+ is given). Unknown ids are silently ignored.
Deferred Call Examples
""""""""""""""""""""""
@@ -229,8 +221,6 @@ also prints::
Deferred Message 1
Deferred Message 2
-
-.. _SET_DEPENDENCY_PROVIDER:
.. _dependency_providers:
Dependency Providers
@@ -241,51 +231,50 @@ Dependency Providers
.. note:: A high-level introduction to this feature can be found in the
:ref:`Using Dependencies Guide <dependency_providers_overview>`.
-.. code-block:: cmake
-
+.. signature::
cmake_language(SET_DEPENDENCY_PROVIDER <command>
SUPPORTED_METHODS <methods>...)
-When a call is made to :command:`find_package` or
-:command:`FetchContent_MakeAvailable`, the call may be forwarded to a
-dependency provider which then has the opportunity to fulfill the request.
-If the request is for one of the ``<methods>`` specified when the provider
-was set, CMake calls the provider's ``<command>`` with a set of
-method-specific arguments. If the provider does not fulfill the request,
-or if the provider doesn't support the request's method, or no provider
-is set, the built-in :command:`find_package` or
-:command:`FetchContent_MakeAvailable` implementation is used to fulfill
-the request in the usual way.
-
-One or more of the following values can be specified for the ``<methods>``
-when setting the provider:
-
-``FIND_PACKAGE``
- The provider command accepts :command:`find_package` requests.
-
-``FETCHCONTENT_MAKEAVAILABLE_SERIAL``
- The provider command accepts :command:`FetchContent_MakeAvailable`
- requests. It expects each dependency to be fed to the provider command
- one at a time, not the whole list in one go.
-
-Only one provider can be set at any point in time. If a provider is already
-set when ``cmake_language(SET_DEPENDENCY_PROVIDER)`` is called, the new
-provider replaces the previously set one. The specified ``<command>`` must
-already exist when ``cmake_language(SET_DEPENDENCY_PROVIDER)`` is called.
-As a special case, providing an empty string for the ``<command>`` and no
-``<methods>`` will discard any previously set provider.
-
-The dependency provider can only be set while processing one of the files
-specified by the :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` variable.
-Thus, dependency providers can only be set as part of the first call to
-:command:`project`. Calling ``cmake_language(SET_DEPENDENCY_PROVIDER)``
-outside of that context will result in an error.
-
-.. note::
- The choice of dependency provider should always be under the user's control.
- As a convenience, a project may choose to provide a file that users can
- list in their :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` variable, but
- the use of such a file should always be the user's choice.
+ When a call is made to :command:`find_package` or
+ :command:`FetchContent_MakeAvailable`, the call may be forwarded to a
+ dependency provider which then has the opportunity to fulfill the request.
+ If the request is for one of the ``<methods>`` specified when the provider
+ was set, CMake calls the provider's ``<command>`` with a set of
+ method-specific arguments. If the provider does not fulfill the request,
+ or if the provider doesn't support the request's method, or no provider
+ is set, the built-in :command:`find_package` or
+ :command:`FetchContent_MakeAvailable` implementation is used to fulfill
+ the request in the usual way.
+
+ One or more of the following values can be specified for the ``<methods>``
+ when setting the provider:
+
+ ``FIND_PACKAGE``
+ The provider command accepts :command:`find_package` requests.
+
+ ``FETCHCONTENT_MAKEAVAILABLE_SERIAL``
+ The provider command accepts :command:`FetchContent_MakeAvailable`
+ requests. It expects each dependency to be fed to the provider command
+ one at a time, not the whole list in one go.
+
+ Only one provider can be set at any point in time. If a provider is already
+ set when ``cmake_language(SET_DEPENDENCY_PROVIDER)`` is called, the new
+ provider replaces the previously set one. The specified ``<command>`` must
+ already exist when ``cmake_language(SET_DEPENDENCY_PROVIDER)`` is called.
+ As a special case, providing an empty string for the ``<command>`` and no
+ ``<methods>`` will discard any previously set provider.
+
+ The dependency provider can only be set while processing one of the files
+ specified by the :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` variable.
+ Thus, dependency providers can only be set as part of the first call to
+ :command:`project`. Calling ``cmake_language(SET_DEPENDENCY_PROVIDER)``
+ outside of that context will result in an error.
+
+ .. note::
+ The choice of dependency provider should always be under the user's control.
+ As a convenience, a project may choose to provide a file that users can
+ list in their :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` variable, but
+ the use of such a file should always be the user's choice.
Provider commands
"""""""""""""""""
@@ -499,23 +488,21 @@ Getting current message log level
.. versionadded:: 3.25
-.. _GET_MESSAGE_LOG_LEVEL:
.. _query_message_log_level:
-.. code-block:: cmake
-
+.. signature::
cmake_language(GET_MESSAGE_LOG_LEVEL <output_variable>)
-Writes the current :command:`message` logging level
-into the given ``<output_variable>``.
+ Writes the current :command:`message` logging level
+ into the given ``<output_variable>``.
-See :command:`message` for the possible logging levels.
+ See :command:`message` for the possible logging levels.
-The current message logging level can be set either using the
-:option:`--log-level <cmake --log-level>`
-command line option of the :manual:`cmake(1)` program or using
-the :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable.
+ The current message logging level can be set either using the
+ :option:`--log-level <cmake --log-level>`
+ command line option of the :manual:`cmake(1)` program or using
+ the :variable:`CMAKE_MESSAGE_LOG_LEVEL` variable.
-If both the command line option and the variable are set, the command line
-option takes precedence. If neither are set, the default logging level
-is returned.
+ If both the command line option and the variable are set, the command line
+ option takes precedence. If neither are set, the default logging level
+ is returned.