| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753 | 
							- CMake Documentation Guide
 
- *************************
 
- The following is a guide to the CMake documentation source for developers.
 
- See documentation on `CMake Development`_ for more information.
 
- .. _`CMake Development`: README.rst
 
- Help
 
- ====
 
- The ``Help`` directory contains CMake help manual source files.
 
- They are written using the `reStructuredText`_ markup syntax and
 
- processed by `Sphinx`_ to generate the CMake help manuals.
 
- .. _`reStructuredText`: http://docutils.sourceforge.net/docs/ref/rst/introduction.html
 
- .. _`Sphinx`: http://sphinx-doc.org
 
- Markup Constructs
 
- -----------------
 
- In addition to using Sphinx to generate the CMake help manuals, we
 
- also use a C++-implemented document processor to print documents for
 
- the ``--help-*`` command-line help options.  It supports a subset of
 
- reStructuredText markup.  When authoring or modifying documents,
 
- please verify that the command-line help looks good in addition to the
 
- Sphinx-generated html and man pages.
 
- The command-line help processor supports the following constructs
 
- defined by reStructuredText, Sphinx, and a CMake extension to Sphinx.
 
- ..
 
-  Note: This list must be kept consistent with the cmRST implementation.
 
- CMake Domain directives
 
-  Directives defined in the `CMake Domain`_ for defining CMake
 
-  documentation objects are printed in command-line help output as
 
-  if the lines were normal paragraph text with interpretation.
 
- CMake Domain interpreted text roles
 
-  Interpreted text roles defined in the `CMake Domain`_ for
 
-  cross-referencing CMake documentation objects are replaced by their
 
-  link text in command-line help output.  Other roles are printed
 
-  literally and not processed.
 
- ``code-block`` directive
 
-  Add a literal code block without interpretation.  The command-line
 
-  help processor prints the block content without the leading directive
 
-  line and with common indentation replaced by one space.
 
- ``include`` directive
 
-  Include another document source file.  The command-line help
 
-  processor prints the included document inline with the referencing
 
-  document.
 
- literal block after ``::``
 
-  A paragraph ending in ``::`` followed by a blank line treats
 
-  the following indented block as literal text without interpretation.
 
-  The command-line help processor prints the ``::`` literally and
 
-  prints the block content with common indentation replaced by one
 
-  space.
 
- ``note`` directive
 
-  Call out a side note.  The command-line help processor prints the
 
-  block content as if the lines were normal paragraph text with
 
-  interpretation.
 
- ``parsed-literal`` directive
 
-  Add a literal block with markup interpretation.  The command-line
 
-  help processor prints the block content without the leading
 
-  directive line and with common indentation replaced by one space.
 
- ``productionlist`` directive
 
-  Render context-free grammar productions.  The command-line help
 
-  processor prints the block content as if the lines were normal
 
-  paragraph text with interpretation.
 
- ``replace`` directive
 
-  Define a ``|substitution|`` replacement.
 
-  The command-line help processor requires a substitution replacement
 
-  to be defined before it is referenced.
 
- ``|substitution|`` reference
 
-  Reference a substitution replacement previously defined by
 
-  the ``replace`` directive.  The command-line help processor
 
-  performs the substitution and replaces all newlines in the
 
-  replacement text with spaces.
 
- ``toctree`` directive
 
-  Include other document sources in the Table-of-Contents
 
-  document tree.  The command-line help processor prints
 
-  the referenced documents inline as part of the referencing
 
-  document.
 
- ``versionadded``, ``versionchanged`` directives
 
-  Specify that something was added or changed by a named CMake version.
 
-  The command-line help processor prints the block content as if the lines
 
-  were normal paragraph text with interpretation.
 
- Inline markup constructs not listed above are printed literally in the
 
- command-line help output.  We prefer to use inline markup constructs that
 
- look correct in source form, so avoid use of \\-escapes in favor of inline
 
- literals when possible.
 
- Explicit markup blocks not matching directives listed above are removed from
 
- command-line help output.  Do not use them, except for plain ``..`` comments
 
- that are removed by Sphinx too.
 
- Note that nested indentation of blocks is not recognized by the
 
- command-line help processor.  Therefore:
 
- * Explicit markup blocks are recognized only when not indented
 
-   inside other blocks.
 
- * Literal blocks after paragraphs ending in ``::`` but not
 
-   at the top indentation level may consume all indented lines
 
-   following them.
 
- Try to avoid these cases in practice.
 
- CMake Domain
 
- ------------
 
- CMake adds a `Sphinx Domain`_ called ``cmake``, also called the
 
- "CMake Domain".  It defines several "object" types for CMake
 
- documentation:
 
- ``command``
 
-  A CMake language command.
 
- ``cpack_gen``
 
-  A CPack package generator.
 
-  See the `cpack(1)`_ command-line tool's ``-G`` option.
 
- ``envvar``
 
-  An environment variable.
 
-  See the `cmake-env-variables(7)`_ manual
 
-  and the `set()`_ command.
 
- ``generator``
 
-  A CMake native build system generator.
 
-  See the `cmake(1)`_ command-line tool's ``-G`` option.
 
- ``genex``
 
-  A CMake generator expression.
 
-  See the `cmake-generator-expressions(7)`_ manual.
 
- ``manual``
 
-  A CMake manual page, like the `cmake(1)`_ manual.
 
- ``module``
 
-  A CMake module.
 
-  See the `cmake-modules(7)`_ manual
 
-  and the `include()`_ command.
 
- ``policy``
 
-  A CMake policy.
 
-  See the `cmake-policies(7)`_ manual
 
-  and the `cmake_policy()`_ command.
 
- ``prop_cache, prop_dir, prop_gbl, prop_sf, prop_inst, prop_test, prop_tgt``
 
-  A CMake cache, directory, global, source file, installed file, test,
 
-  or target property, respectively.  See the `cmake-properties(7)`_
 
-  manual and the `set_property()`_ command.
 
- ``variable``
 
-  A CMake language variable.
 
-  See the `cmake-variables(7)`_ manual
 
-  and the `set()`_ command.
 
- Documentation objects in the CMake Domain come from two sources:
 
- 1. The CMake extension to Sphinx transforms every document named
 
-    with the form ``Help/<type>/<file-name>.rst`` to a domain object with
 
-    type ``<type>``.  The object name is extracted from the document title,
 
-    which is expected to be of the form::
 
-     <object-name>
 
-     -------------
 
-    and to appear at or near the top of the ``.rst`` file before any other lines
 
-    starting in a letter, digit, ``<``, or ``$``.  If no such title appears
 
-    literally in the ``.rst`` file, the object name is the ``<file-name>``.
 
-    If a title does appear, it is expected that ``<file-name>`` is equal
 
-    to ``<object-name>`` with any ``<`` and ``>`` characters removed,
 
-    or in the case of a ``$<genex-name>`` or ``$<genex-name:...>``, the
 
-    ``genex-name``.
 
- 2. `CMake Domain directives`_ may be used in documents to explicitly define
 
-    some object types:
 
-    * `command directive`_
 
-    * `envvar directive`_
 
-    * `genex directive`_
 
-    * `variable directive`_
 
-    Object types for which no directive is available must be defined using
 
-    the document transform above.
 
- CMake Domain Directives
 
- -----------------------
 
- The CMake Domain provides the following directives.
 
- ``command`` directive
 
- ^^^^^^^^^^^^^^^^^^^^^
 
- Document a "command" object:
 
- .. code-block:: rst
 
-   .. command:: <command-name>
 
-     This indented block documents <command-name>.
 
- The directive requires a single argument, the command name.
 
- ``envvar`` directive
 
- ^^^^^^^^^^^^^^^^^^^^
 
- Document an "envvar" object:
 
- .. code-block:: rst
 
-   .. envvar:: <envvar-name>
 
-     This indented block documents <envvar-name>.
 
- The directive requires a single argument, the environment variable name.
 
- ``genex`` directive
 
- ^^^^^^^^^^^^^^^^^^^
 
- Document a "genex" object:
 
- .. code-block:: rst
 
-  .. genex:: <genex-name>
 
-   This indented block documents <genex-name>.
 
- The directive requires a single argument, the generator expression name.
 
- The optional ``:target:`` option allows a custom target name to be specified.
 
- Because this will affect the ability to reference the "genex" object using the
 
- ``:genex:`` role, this option should be used very sparingly.
 
- ``signature`` directive
 
- ^^^^^^^^^^^^^^^^^^^^^^^
 
- Document `CMake Command Signatures <Style: CMake Command Signatures_>`_
 
- within a ``Help/command/<command-name>.rst`` document.
 
- .. code-block:: rst
 
-   .. signature:: <command-name>(<signature>)
 
-     This indented block documents one or more signatures of a CMake command.
 
- The ``signature`` directive requires one argument, the signature summary:
 
- * One or more signatures must immediately follow the ``::``.
 
-   The first signature may optionally be placed on the same line.
 
-   A blank line following the ``signature`` directive will result in a
 
-   documentation generation error: ``1 argument(s) required, 0 supplied``.
 
- * Signatures may be split across multiple lines, but the final ``)`` of each
 
-   signature must be the last character on its line.
 
- * Blank lines between signatures are not allowed.  (Content after a blank line
 
-   is treated as part of the description.)
 
- * Whitespace in signatures is not preserved.  To document a complex signature,
 
-   abbreviate it in the ``signature`` directive argument and specify the full
 
-   signature in a ``code-block`` in the description.
 
- The ``signature`` directive generates a hyperlink target for each signature:
 
- * Default target names are automatically extracted from leading "keyword"
 
-   arguments in the signatures, where a keyword is any sequence of
 
-   non-space starting with a letter.  For example, the signature
 
-   ``string(REGEX REPLACE <match-regex> ...)`` generates the target
 
-   ``REGEX REPLACE``, similar to ``.. _`REGEX REPLACE`:``.
 
- * Custom target names may be specified using a ``:target:`` option.
 
-   For example:
 
-   .. code-block:: rst
 
-     .. signature::
 
-       cmake_path(GET <path-var> ROOT_NAME <out-var>)
 
-       cmake_path(GET <path-var> ROOT_PATH <out-var>)
 
-       :target:
 
-         GET ROOT_NAME
 
-         GET ROOT_PATH
 
-   Provide a custom target name for each signature, one per line.
 
-   The first target may optionally be placed on the same line as ``:target:``.
 
- * If a target name is already in use earlier in the document, no hyperlink
 
-   target will be generated.
 
- * The targets may be referenced from within the same document using
 
-   ```REF`_`` or ```TEXT <REF_>`_`` syntax.  Like reStructuredText section
 
-   headers, the targets do not work with Sphinx ``:ref:`` syntax, however
 
-   they can be globally referenced using e.g. ``:command:`string(APPEND)```.
 
- Although whitespace in the signature is not preserved, by default, line breaks
 
- are suppressed inside of square- or angle-brackets.  This behavior can be
 
- controlled using the ``:break:`` option; note, however, that there is no way
 
- to *force* a line break.  The default value is 'smart'.  Allowable values are:
 
-   ``all``
 
-     Allow line breaks at any whitespace.
 
-   ``smart`` (default)
 
-     Allow line breaks at whitespace, except between matched square- or
 
-     angle-brackets.  For example, if a signature contains the text
 
-     ``<input>... [OUTPUT_VARIABLE <out-var>]``, a line break would be allowed
 
-     after ``<input>...`` but not between ``OUTPUT_VARIABLE`` and ``<out-var>``.
 
-   ``verbatim``
 
-     Allow line breaks only where the source document contains a newline.
 
- The directive treats its content as the documentation of the signature(s).
 
- Indent the signature documentation accordingly.
 
- ``variable`` directive
 
- ^^^^^^^^^^^^^^^^^^^^^^
 
- Document a "variable" object:
 
- .. code-block:: rst
 
-  .. variable:: <variable-name>
 
-   This indented block documents <variable-name>.
 
- The directive requires a single argument, the variable name.
 
- .. _`Sphinx Domain`: http://sphinx-doc.org/domains.html
 
- .. _`cmake(1)`: https://cmake.org/cmake/help/latest/manual/cmake.1.html
 
- .. _`cmake-env-variables(7)`: https://cmake.org/cmake/help/latest/manual/cmake-env-variables.7.html
 
- .. _`cmake-generator-expressions(7)`: https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html
 
- .. _`cmake-modules(7)`: https://cmake.org/cmake/help/latest/manual/cmake-modules.7.html
 
- .. _`cmake-policies(7)`: https://cmake.org/cmake/help/latest/manual/cmake-policies.7.html
 
- .. _`cmake-properties(7)`: https://cmake.org/cmake/help/latest/manual/cmake-properties.7.html
 
- .. _`cmake-variables(7)`: https://cmake.org/cmake/help/latest/manual/cmake-variables.7.html
 
- .. _`cmake_policy()`: https://cmake.org/cmake/help/latest/command/cmake_policy.html
 
- .. _`cpack(1)`: https://cmake.org/cmake/help/latest/manual/cpack.1.html
 
- .. _`include()`: https://cmake.org/cmake/help/latest/command/include.html
 
- .. _`set()`: https://cmake.org/cmake/help/latest/command/set.html
 
- .. _`set_property()`: https://cmake.org/cmake/help/latest/command/set_property.html
 
- Cross-References
 
- ----------------
 
- Sphinx uses reStructuredText interpreted text roles to provide
 
- cross-reference syntax.  The `CMake Domain`_ provides for each
 
- domain object type a role of the same name to cross-reference it.
 
- CMake Domain roles are inline markup of the forms::
 
-  :type:`name`
 
-  :type:`text <name>`
 
- where ``type`` is the domain object type and ``name`` is the
 
- domain object name.  In the first form the link text will be
 
- ``name`` (or ``name()`` if the type is ``command``) and in
 
- the second form the link text will be the explicit ``text``.
 
- For example, the code:
 
- .. code-block:: rst
 
-  * The :command:`list` command.
 
-  * The :command:`list(APPEND)` sub-command.
 
-  * The :command:`list() command <list>`.
 
-  * The :command:`list(APPEND) sub-command <list>`.
 
-  * The :variable:`CMAKE_VERSION` variable.
 
-  * The :prop_tgt:`OUTPUT_NAME_<CONFIG>` target property.
 
- produces:
 
- * The `list()`_ command.
 
- * The `list(APPEND)`_ sub-command.
 
- * The `list() command`_.
 
- * The `list(APPEND) sub-command`_.
 
- * The `CMAKE_VERSION`_ variable.
 
- * The `OUTPUT_NAME_<CONFIG>`_ target property.
 
- Note that CMake Domain roles differ from Sphinx and reStructuredText
 
- convention in that the form ``a<b>``, without a space preceding ``<``,
 
- is interpreted as a name instead of link text with an explicit target.
 
- This is necessary because we use ``<placeholders>`` frequently in
 
- object names like ``OUTPUT_NAME_<CONFIG>``.  The form ``a <b>``,
 
- with a space preceding ``<``, is still interpreted as a link text
 
- with an explicit target.
 
- Additionally, the ``cref`` role may be used to create references
 
- to local targets that have literal styling.  This is especially
 
- useful for referencing a subcommand in the command's documentation.
 
- .. _`list()`: https://cmake.org/cmake/help/latest/command/list.html
 
- .. _`list(APPEND)`: https://cmake.org/cmake/help/latest/command/list.html
 
- .. _`list(APPEND) sub-command`: https://cmake.org/cmake/help/latest/command/list.html
 
- .. _`list() command`: https://cmake.org/cmake/help/latest/command/list.html
 
- .. _`CMAKE_VERSION`: https://cmake.org/cmake/help/latest/variable/CMAKE_VERSION.html
 
- .. _`OUTPUT_NAME_<CONFIG>`: https://cmake.org/cmake/help/latest/prop_tgt/OUTPUT_NAME_CONFIG.html
 
- Style
 
- -----
 
- Style: Section Headers
 
- ^^^^^^^^^^^^^^^^^^^^^^
 
- When marking section titles, make the section decoration line as long as
 
- the title text.  Use only a line below the title, not above. For
 
- example:
 
- .. code-block:: rst
 
-   Title Text
 
-   ----------
 
- Capitalize the first letter of each non-minor word in the title.
 
- The section header underline character hierarchy is
 
- * ``#``: Manual group (part) in the master document
 
- * ``*``: Manual (chapter) title
 
- * ``=``: Section within a manual
 
- * ``-``: Subsection or `CMake Domain`_ object document title
 
- * ``^``: Subsubsection or `CMake Domain`_ object document section
 
- * ``"``: Paragraph or `CMake Domain`_ object document subsection
 
- Style: Whitespace
 
- ^^^^^^^^^^^^^^^^^
 
- Use two spaces for indentation.  Use two spaces between sentences in
 
- prose.
 
- Style: Line Length
 
- ^^^^^^^^^^^^^^^^^^
 
- Prefer to restrict the width of lines to 75-80 columns.  This is not a
 
- hard restriction, but writing new paragraphs wrapped at 75 columns
 
- allows space for adding minor content without significant re-wrapping of
 
- content.
 
- Style: Prose
 
- ^^^^^^^^^^^^
 
- Use American English spellings in prose.
 
- Style: Starting Literal Blocks
 
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
- Prefer to mark the start of literal blocks with ``::`` at the end of
 
- the preceding paragraph. In cases where the following block gets
 
- a ``code-block`` marker, put a single ``:`` at the end of the preceding
 
- paragraph.
 
- Style: CMake Command Signatures
 
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
- A ``Help/command/<command-name>.rst`` document defines one ``command``
 
- object in the `CMake Domain`_, but some commands have multiple signatures.
 
- Use the CMake Domain's `signature directive`_ to document each signature.
 
- Separate signatures from preceding content by a section header.
 
- For example:
 
- .. code-block:: rst
 
-   ... preceding paragraph.
 
-   Normal Libraries
 
-   ^^^^^^^^^^^^^^^^
 
-   .. signature::
 
-     add_library(<lib> ...)
 
-     This signature is used for ...
 
- Use the following conventions in command signature documentation:
 
- * Use an angle-bracket ``<placeholder>`` for arguments to be specified
 
-   by the caller.  Refer to them in prose using
 
-   `inline literal <Style: Inline Literals_>`_ syntax.
 
- * Wrap optional parts with square brackets.
 
- * Mark repeatable parts with a trailing ellipsis (``...``).
 
- The ``signature`` directive may be used multiple times for different
 
- signatures of the same command.
 
- Style: Boolean Constants
 
- ^^^^^^^^^^^^^^^^^^^^^^^^
 
- Use "``OFF``" and "``ON``" for boolean values which can be modified by
 
- the user, such as ``POSITION_INDEPENDENT_CODE``.  Such properties
 
- may be "enabled" and "disabled". Use "``True``" and "``False``" for
 
- inherent values which can't be modified after being set, such as the
 
- ``IMPORTED`` property of a build target.
 
- Style: Inline Literals
 
- ^^^^^^^^^^^^^^^^^^^^^^
 
- Mark up references to keywords in signatures, file names, and other
 
- technical terms with ``inline-literal`` syntax, for example:
 
- .. code-block:: rst
 
-   If ``WIN32`` is used with :command:`add_executable`, the
 
-   :prop_tgt:`WIN32_EXECUTABLE` target property is enabled. That command
 
-   creates the file ``<name>.exe`` on Windows.
 
- Style: Cross-References
 
- ^^^^^^^^^^^^^^^^^^^^^^^
 
- Mark up linkable references as links, including repeats.
 
- An alternative, which is used by wikipedia
 
- (`<http://en.wikipedia.org/wiki/WP:REPEATLINK>`_),
 
- is to link to a reference only once per article. That style is not used
 
- in CMake documentation.
 
- Style: Referencing CMake Concepts
 
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
- If referring to a concept which corresponds to a property, and that
 
- concept is described in a high-level manual, prefer to link to the
 
- manual section instead of the property. For example:
 
- .. code-block:: rst
 
-   This command creates an :ref:`Imported Target <Imported Targets>`.
 
- instead of:
 
- .. code-block:: rst
 
-   This command creates an :prop_tgt:`IMPORTED` target.
 
- The latter should be used only when referring specifically to the
 
- property.
 
- References to manual sections are not automatically created by creating
 
- a section, but code such as:
 
- .. code-block:: rst
 
-   .. _`Imported Targets`:
 
- creates a suitable anchor.  Use an anchor name which matches the name
 
- of the corresponding section.  Refer to the anchor using a
 
- cross-reference with specified text.
 
- Imported Targets need the ``IMPORTED`` term marked up with care in
 
- particular because the term may refer to a command keyword, a target
 
- property, or a concept.
 
- Where a property, command or variable is related conceptually to others,
 
- by for example, being related to the buildsystem description, generator
 
- expressions or Qt, each relevant property, command or variable should
 
- link to the primary manual, which provides high-level information.  Only
 
- particular information relating to the command should be in the
 
- documentation of the command.
 
- Style: Referencing CMake Domain Objects
 
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
- When referring to `CMake Domain`_ objects such as properties, variables,
 
- commands etc, prefer to link to the target object and follow that with
 
- the type of object it is.  For example:
 
- .. code-block:: rst
 
-   Set the :prop_tgt:`AUTOMOC` target property to ``ON``.
 
- Instead of
 
- .. code-block:: rst
 
-   Set the target property :prop_tgt:`AUTOMOC` to ``ON``.
 
- The ``policy`` directive is an exception, and the type us usually
 
- referred to before the link:
 
- .. code-block:: rst
 
-   If policy :policy:`CMP0022` is set to ``NEW`` the behavior is ...
 
- However, markup self-references with ``inline-literal`` syntax.
 
- For example, within the ``add_executable`` command documentation, use
 
- .. code-block:: rst
 
-   ``add_executable``
 
- not
 
- .. code-block:: rst
 
-   :command:`add_executable`
 
- which is used elsewhere.
 
- Modules
 
- =======
 
- The ``Modules`` directory contains CMake-language ``.cmake`` module files.
 
- Module Documentation
 
- --------------------
 
- To document CMake module ``Modules/<module-name>.cmake``, modify
 
- ``Help/manual/cmake-modules.7.rst`` to reference the module in the
 
- ``toctree`` directive, in sorted order, as::
 
-  /module/<module-name>
 
- Then add the module document file ``Help/module/<module-name>.rst``
 
- containing just the line::
 
-  .. cmake-module:: ../../Modules/<module-name>.cmake
 
- The ``cmake-module`` directive will scan the module file to extract
 
- reStructuredText markup from comment blocks that start in ``.rst:``.
 
- At the top of ``Modules/<module-name>.cmake``, begin with the following
 
- license notice:
 
- ::
 
-  # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 
-  # file Copyright.txt or https://cmake.org/licensing for details.
 
- After this notice, add a *BLANK* line.  Then, add documentation using
 
- a `Bracket Comment`_ of the form:
 
- ::
 
-   #[=======================================================================[.rst:
 
-   <module-name>
 
-   -------------
 
-   <reStructuredText documentation of module>
 
-   #]=======================================================================]
 
- Any number of ``=`` may be used in the opening and closing brackets
 
- as long as they match.  Content on the line containing the closing
 
- bracket is excluded if and only if the line starts in ``#``.
 
- Additional such ``.rst:`` comments may appear anywhere in the module file.
 
- All such comments must start with ``#`` in the first column.
 
- For example, a ``FindXxx.cmake`` module may contain:
 
- ::
 
-   # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
 
-   # file Copyright.txt or https://cmake.org/licensing for details.
 
-   #[=======================================================================[.rst:
 
-   FindXxx
 
-   -------
 
-   This is a cool module.
 
-   This module does really cool stuff.
 
-   It can do even more than you think.
 
-   It even needs two paragraphs to tell you about it.
 
-   And it defines the following variables:
 
-   ``VAR_COOL``
 
-     this is great isn't it?
 
-   ``VAR_REALLY_COOL``
 
-     cool right?
 
-   #]=======================================================================]
 
-   <code>
 
-   #[=======================================================================[.rst:
 
-   .. command:: Xxx_do_something
 
-    This command does something for Xxx::
 
-     Xxx_do_something(some arguments)
 
-   #]=======================================================================]
 
-   macro(Xxx_do_something)
 
-     <code>
 
-   endmacro()
 
- Test the documentation formatting by running
 
- ``cmake --help-module <module-name>``, and also by enabling the
 
- ``SPHINX_HTML`` and ``SPHINX_MAN`` options to build the documentation.
 
- Edit the comments until generated documentation looks satisfactory.  To
 
- have a .cmake file in this directory NOT show up in the modules
 
- documentation, simply leave out the ``Help/module/<module-name>.rst``
 
- file and the ``Help/manual/cmake-modules.7.rst`` toctree entry.
 
- .. _`Bracket Comment`: https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#bracket-comment
 
- Module Functions and Macros
 
- ---------------------------
 
- Modules may provide CMake functions and macros defined by the `function()`_
 
- and `macro()`_ commands.  To avoid conflicts across modules, name the
 
- functions and macros using the prefix ``<ModuleName>_`` followed by the
 
- rest of the name, where ``<ModuleName>`` is the exact-case spelling of
 
- the module name.  We have no convention for the portion of names after
 
- the ``<ModuleName>_`` prefix.
 
- For historical reasons, some modules that come with CMake do not follow
 
- this prefix convention.  When adding new functions to these modules,
 
- discussion during review can decide whether to follow their existing
 
- convention or to use the module name prefix.
 
- Documentation of public functions and macros should be provided in
 
- the module, typically in the main `module documentation`_ at the top.
 
- For example, a ``MyModule`` module may document a function like this::
 
-   #[=======================================================================[.rst:
 
-   MyModule
 
-   --------
 
-   This is my module.  It provides some functions.
 
-   .. command:: MyModule_Some_Function
 
-     This is some function:
 
-     .. code-block:: cmake
 
-       MyModule_Some_Function(...)
 
-   #]=======================================================================]
 
- Documentation may alternatively be placed just before each definition.
 
- For example, a ``MyModule`` module may document another function like this::
 
-   #[=======================================================================[.rst:
 
-   .. command:: MyModule_Other_Function
 
-     This is another function:
 
-     .. code-block:: cmake
 
-       MyModule_Other_Function(...)
 
-   #]=======================================================================]
 
-   function(MyModule_Other_Function ...)
 
-     # ...
 
-   endfunction()
 
- .. _`function()`: https://cmake.org/cmake/help/latest/command/function.html
 
- .. _`macro()`: https://cmake.org/cmake/help/latest/command/macro.html
 
 
  |