set_property
------------

Set a named property in a given scope.

.. code-block:: cmake

  set_property(<GLOBAL                      |
                DIRECTORY [<dir>]           |
                TARGET    [<target1> ...]   |
                SOURCE    [<src1> ...]
                          [DIRECTORY <dirs> ...] |
                          [TARGET_DIRECTORY <targets> ...]
                INSTALL   [<file1> ...]     |
                TEST      [<test1> ...]     |
                CACHE     [<entry1> ...]    >
               [APPEND] [APPEND_STRING]
               PROPERTY <name> [<value1> ...])

Sets one property on zero or more objects of a scope.

The first argument determines the scope in which the property is set.
It must be one of the following:

``GLOBAL``
  Scope is unique and does not accept a name.

``DIRECTORY``
  Scope defaults to the current directory but another directory
  (already processed by CMake) may be named by full or relative path.
  See also the :command:`set_directory_properties` command.

``TARGET``
  Scope may name zero or more existing targets.
  See also the :command:`set_target_properties` command.

``SOURCE``
  Scope may name zero or more source files.  By default, source file properties
  are only visible to targets added in the same directory (``CMakeLists.txt``).
  Visibility can be set in other directory scopes using one or both of the
  following sub-options:

  ``DIRECTORY <dirs>...``
    The source file property will be set in each of the ``<dirs>``
    directories' scopes.  CMake must already know about each of these
    source directories, either by having added them through a call to
    :command:`add_subdirectory` or it being the top level source directory.
    Relative paths are treated as relative to the current source directory.

  ``TARGET_DIRECTORY <targets>...``
    The source file property will be set in each of the directory scopes
    where any of the specified ``<targets>`` were created (the ``<targets>``
    must therefore already exist).

  See also the :command:`set_source_files_properties` command.

``INSTALL``
  Scope may name zero or more installed file paths.
  These are made available to CPack to influence deployment.

  Both the property key and value may use generator expressions.
  Specific properties may apply to installed files and/or directories.

  Path components have to be separated by forward slashes,
  must be normalized and are case sensitive.

  To reference the installation prefix itself with a relative path use ``.``.

  Currently installed file properties are only defined for
  the WIX generator where the given paths are relative
  to the installation prefix.

``TEST``
  Scope may name zero or more existing tests.
  See also the :command:`set_tests_properties` command.

``CACHE``
  Scope must name zero or more cache existing entries.

The required ``PROPERTY`` option is immediately followed by the name of
the property to set.  Remaining arguments are used to compose the
property value in the form of a semicolon-separated list.

If the ``APPEND`` option is given the list is appended to any existing
property value (except that empty values are ignored and not appended).
If the ``APPEND_STRING`` option is given the string is
appended to any existing property value as string, i.e. it results in a
longer string and not a list of strings.  When using ``APPEND`` or
``APPEND_STRING`` with a property defined to support ``INHERITED``
behavior (see :command:`define_property`), no inheriting occurs when
finding the initial value to append to.  If the property is not already
directly set in the nominated scope, the command will behave as though
``APPEND`` or ``APPEND_STRING`` had not been given.

See the :manual:`cmake-properties(7)` manual for a list of properties
in each scope.
