Merge topic 'doc-set-command'
77d466ec
Help: Document conversion of PATH/FILEPATH cache values to absolute paths91eb7363
Help: Rewrite 'set` command documentationc6593511
Help: Add link target to cmake-language.7 variables section
This commit is contained in:
commit
a5b4d19769
|
@ -1,116 +1,89 @@
|
||||||
set
|
set
|
||||||
---
|
---
|
||||||
|
|
||||||
Set a CMake, cache or environment variable to a given value.
|
Set a normal, cache, or environment variable to a given value.
|
||||||
|
See the :ref:`cmake-language(7) variables <CMake Language Variables>`
|
||||||
|
documentation for the scopes and interaction of normal variables
|
||||||
|
and cache entries.
|
||||||
|
|
||||||
|
Signatures of this command that specify a ``<value>...`` placeholder
|
||||||
|
expect zero or more arguments. Multiple arguments will be joined as
|
||||||
|
a :ref:`;-list <CMake Language Lists>` to form the actual variable
|
||||||
|
value to be set. Zero arguments will cause normal variables to be
|
||||||
|
unset. See the :command:`unset` command to unset variables explicitly.
|
||||||
|
|
||||||
|
Set Normal Variable
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
set(<variable> <value>
|
set(<variable> <value>... [PARENT_SCOPE])
|
||||||
[[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])
|
|
||||||
|
|
||||||
Within CMake sets <variable> to the value <value>. <value> is
|
Set the given ``<variable>`` in the current function or directory scope.
|
||||||
expanded before <variable> is set to it. Normally, set will set a
|
|
||||||
regular CMake variable. If CACHE is present, then the <variable> is
|
If the ``PARENT_SCOPE`` option is given the variable will be set in
|
||||||
put in the cache instead, unless it is already in the cache. See
|
the scope above the current scope. Each new directory or function
|
||||||
section 'Variable types in CMake' below for details of regular and
|
creates a new scope. This command will set the value of a variable
|
||||||
cache variables and their interactions. If CACHE is used, <type> and
|
into the parent directory or calling function (whichever is applicable
|
||||||
<docstring> are required. <type> is used by the CMake GUI to choose a
|
to the case at hand).
|
||||||
widget with which the user sets a value. The value for <type> may be
|
|
||||||
one of
|
Set Cache Entry
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
FILEPATH = File chooser dialog.
|
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
|
||||||
PATH = Directory chooser dialog.
|
|
||||||
STRING = Arbitrary string.
|
|
||||||
BOOL = Boolean ON/OFF checkbox.
|
|
||||||
INTERNAL = No GUI entry (used for persistent variables).
|
|
||||||
|
|
||||||
If <type> is INTERNAL, the cache variable is marked as internal, and
|
Set the given cache ``<variable>`` (cache entry). Since cache entries
|
||||||
will not be shown to the user in tools like cmake-gui. This is
|
are meant to provide user-settable values this does not overwrite
|
||||||
intended for values that should be persisted in the cache, but which
|
existing cache entries by default. Use the ``FORCE`` option to
|
||||||
users should not normally change. INTERNAL implies FORCE.
|
overwrite existing entries.
|
||||||
|
|
||||||
Normally, set(...CACHE...) creates cache variables, but does not
|
The ``<type>`` must be specified as one of:
|
||||||
modify them. If FORCE is specified, the value of the cache variable
|
|
||||||
is set, even if the variable is already in the cache. This should
|
|
||||||
normally be avoided, as it will remove any changes to the cache
|
|
||||||
variable's value by the user.
|
|
||||||
|
|
||||||
If PARENT_SCOPE is present, the variable will be set in the scope
|
``BOOL``
|
||||||
above the current scope. Each new directory or function creates a new
|
Boolean ``ON/OFF`` value. :manual:`cmake-gui(1)` offers a checkbox.
|
||||||
scope. This command will set the value of a variable into the parent
|
|
||||||
directory or calling function (whichever is applicable to the case at
|
|
||||||
hand). PARENT_SCOPE cannot be combined with CACHE.
|
|
||||||
|
|
||||||
If <value> is not specified then the variable is removed instead of
|
``FILEPATH``
|
||||||
set. See also: the unset() command.
|
Path to a file on disk. :manual:`cmake-gui(1)` offers a file dialog.
|
||||||
|
|
||||||
|
``PATH``
|
||||||
|
Path to a directory on disk. :manual:`cmake-gui(1)` offers a file dialog.
|
||||||
|
|
||||||
|
``STRING``
|
||||||
|
A line of text. :manual:`cmake-gui(1)` offers a text field or a
|
||||||
|
drop-down selection if the :prop_cache:`STRINGS` cache entry
|
||||||
|
property is set.
|
||||||
|
|
||||||
|
``INTERNAL``
|
||||||
|
A line of text. :manual:`cmake-gui(1)` does not show internal entries.
|
||||||
|
They may be used to store variables persistently across runs.
|
||||||
|
Use of this type implies ``FORCE``.
|
||||||
|
|
||||||
|
The ``<docstring>`` must be specified as a line of text providing
|
||||||
|
a quick summary of the option for presentation to :manual:`cmake-gui(1)`
|
||||||
|
users.
|
||||||
|
|
||||||
|
If the cache entry does not exist prior to the call or the ``FORCE``
|
||||||
|
option is given then the cache entry will be set to the given value.
|
||||||
|
Furthermore, any normal variable binding in the current scope will
|
||||||
|
be removed to expose the newly cached value to any immediately
|
||||||
|
following evaluation.
|
||||||
|
|
||||||
|
It is possible for the cache entry to exist prior to the call but
|
||||||
|
have no type set if it was created on the :manual:`cmake(1)` command
|
||||||
|
line by a user through the ``-D<var>=<value>`` option without
|
||||||
|
specifying a type. In this case the ``set`` command will add the
|
||||||
|
type. Furthermore, if the ``<type>`` is ``PATH`` or ``FILEPATH``
|
||||||
|
and the ``<value>`` provided on the command line is a relative path,
|
||||||
|
then the ``set`` command will treat the path as relative to the
|
||||||
|
current working directory and convert it to an absolute path.
|
||||||
|
|
||||||
|
Set Environment Variable
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
set(<variable> <value1> ... <valueN>)
|
set(ENV{<variable>} <value>...)
|
||||||
|
|
||||||
In this case <variable> is set to a semicolon separated list of
|
Set the current process environment ``<variable>`` to the given value.
|
||||||
values.
|
|
||||||
|
|
||||||
<variable> can be an environment variable such as:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
set( ENV{PATH} /home/martink )
|
|
||||||
|
|
||||||
in which case the environment variable will be set.
|
|
||||||
|
|
||||||
*** Variable types in CMake ***
|
|
||||||
|
|
||||||
In CMake there are two types of variables: normal variables and cache
|
|
||||||
variables. Normal variables are meant for the internal use of the
|
|
||||||
script (just like variables in most programming languages); they are
|
|
||||||
not persisted across CMake runs. Cache variables (unless set with
|
|
||||||
INTERNAL) are mostly intended for configuration settings where the
|
|
||||||
first CMake run determines a suitable default value, which the user
|
|
||||||
can then override, by editing the cache with tools such as ccmake or
|
|
||||||
cmake-gui. Cache variables are stored in the CMake cache file, and
|
|
||||||
are persisted across CMake runs.
|
|
||||||
|
|
||||||
Both types can exist at the same time with the same name but different
|
|
||||||
values. When ${FOO} is evaluated, CMake first looks for a normal
|
|
||||||
variable 'FOO' in scope and uses it if set. If and only if no normal
|
|
||||||
variable exists then it falls back to the cache variable 'FOO'.
|
|
||||||
|
|
||||||
Some examples:
|
|
||||||
|
|
||||||
The code 'set(FOO "x")' sets the normal variable 'FOO'. It does not
|
|
||||||
touch the cache, but it will hide any existing cache value 'FOO'.
|
|
||||||
|
|
||||||
The code 'set(FOO "x" CACHE ...)' checks for 'FOO' in the cache,
|
|
||||||
ignoring any normal variable of the same name. If 'FOO' is in the
|
|
||||||
cache then nothing happens to either the normal variable or the cache
|
|
||||||
variable. If 'FOO' is not in the cache, then it is added to the
|
|
||||||
cache.
|
|
||||||
|
|
||||||
Finally, whenever a cache variable is added or modified by a command,
|
|
||||||
CMake also *removes* the normal variable of the same name from the
|
|
||||||
current scope so that an immediately following evaluation of it will
|
|
||||||
expose the newly cached value.
|
|
||||||
|
|
||||||
Normally projects should avoid using normal and cache variables of the
|
|
||||||
same name, as this interaction can be hard to follow. However, in
|
|
||||||
some situations it can be useful. One example (used by some
|
|
||||||
projects):
|
|
||||||
|
|
||||||
A project has a subproject in its source tree. The child project has
|
|
||||||
its own CMakeLists.txt, which is included from the parent
|
|
||||||
CMakeLists.txt using add_subdirectory(). Now, if the parent and the
|
|
||||||
child project provide the same option (for example a compiler option),
|
|
||||||
the parent gets the first chance to add a user-editable option to the
|
|
||||||
cache. Normally, the child would then use the same value that the
|
|
||||||
parent uses. However, it may be necessary to hard-code the value for
|
|
||||||
the child project's option while still allowing the user to edit the
|
|
||||||
value used by the parent project. The parent project can achieve this
|
|
||||||
simply by setting a normal variable with the same name as the option
|
|
||||||
in a scope sufficient to hide the option's cache variable from the
|
|
||||||
child completely. The parent has already set the cache variable, so
|
|
||||||
the child's set(...CACHE...) will do nothing, and evaluating the
|
|
||||||
option variable will use the value from the normal variable, which
|
|
||||||
hides the cache variable.
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
containing SET commands that use the CACHE option, not a
|
containing SET commands that use the CACHE option, not a
|
||||||
cache-format file.
|
cache-format file.
|
||||||
|
|
||||||
``-D <var>:<type>=<value>``
|
``-D <var>:<type>=<value>, -D <var>=<value>``
|
||||||
Create a cmake cache entry.
|
Create a cmake cache entry.
|
||||||
|
|
||||||
When cmake is first run in an empty build tree, it creates a
|
When cmake is first run in an empty build tree, it creates a
|
||||||
|
@ -19,6 +19,14 @@
|
||||||
takes priority over the project's default value. The option may be
|
takes priority over the project's default value. The option may be
|
||||||
repeated for as many cache entries as desired.
|
repeated for as many cache entries as desired.
|
||||||
|
|
||||||
|
If the ``:<type>`` portion is given it must be one of the types
|
||||||
|
specified by the :command:`set` command documentation for its
|
||||||
|
``CACHE`` signature.
|
||||||
|
If the ``:<type>`` portion is omitted the entry will be created
|
||||||
|
with no type if it does not exist with a type already. If a
|
||||||
|
command in the project sets the type to ``PATH`` or ``FILEPATH``
|
||||||
|
then the ``<value>`` will be converted to an absolute path.
|
||||||
|
|
||||||
``-U <globbing_expr>``
|
``-U <globbing_expr>``
|
||||||
Remove matching entries from CMake cache.
|
Remove matching entries from CMake cache.
|
||||||
|
|
||||||
|
|
|
@ -485,6 +485,8 @@ The :command:`macro`/:command:`endmacro`, and
|
||||||
:command:`function`/:command:`endfunction` commands delimit
|
:command:`function`/:command:`endfunction` commands delimit
|
||||||
code blocks to be recorded for later invocation as commands.
|
code blocks to be recorded for later invocation as commands.
|
||||||
|
|
||||||
|
.. _`CMake Language Variables`:
|
||||||
|
|
||||||
Variables
|
Variables
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue