123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762 |
- 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`: https://docutils.sourceforge.net/docs/ref/rst/introduction.html
- .. _`Sphinx`: https://sphinx-doc.org
- To generate the HTML and/or man documentation locally from within the CMake
- repository to ``build/html`` and ``build/man`` directories:
- .. code-block:: console
- $ cmake -S Utilities/Sphinx -B build -DSPHINX_HTML=ON -DSPHINX_MAN=ON
- $ cmake --build build
- 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`: https://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
- * ``~``: `CMake Domain`_ object document subsubsection
- 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
- (`<https://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:
- .. code-block:: cmake
- # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- # file LICENSE.rst or https://cmake.org/licensing for details.
- After this notice, add a *BLANK* line. Then, add documentation using
- a `Bracket Comment`_ of the form:
- .. code-block:: cmake
- #[=======================================================================[.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:
- .. code-block:: cmake
- # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- # file LICENSE.rst 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
|