summaryrefslogtreecommitdiffstats
path: root/Help/prop_sf/GENERATED.rst
blob: 6ef45802268e249ddb687a6cc2011c91abb418b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
GENERATED
---------

Is this source file generated as part of the build or CMake process.

.. versionchanged:: 3.20
  The GENERATED source file property is now visible in all directories.

Tells the internal CMake engine that a source file is generated by an outside
process such as another build step, or the execution of CMake itself.
This information is then used to exempt the file from any existence or
validity checks.

Any file that is

- created by the execution of commands such as
  :command:`add_custom_command` and :command:`file(GENERATE)`
- listed as one of the ``BYPRODUCTS`` of an :command:`add_custom_command`
  or :command:`add_custom_target` command, or
- created by a CMake ``AUTOGEN`` operation such as :prop_tgt:`AUTOMOC`,
  :prop_tgt:`AUTORCC`, or :prop_tgt:`AUTOUIC`

will be marked with the ``GENERATED`` property.

When a generated file created as the ``OUTPUT`` of an
:command:`add_custom_command` command is explicitly listed as a source file
for any target in the same directory scope (which usually means the same
``CMakeLists.txt`` file), CMake will automatically create a dependency to
make sure the file is generated before building that target.

The :ref:`Makefile Generators` will remove ``GENERATED`` files during
``make clean``.

Generated sources may be hidden in some IDE tools, while in others they might
be shown. For the special case of sources generated by CMake's :prop_tgt:`AUTOMOC`
or :prop_tgt:`AUTORCC` functionality, the :prop_gbl:`AUTOGEN_SOURCE_GROUP`,
:prop_gbl:`AUTOMOC_SOURCE_GROUP` and :prop_gbl:`AUTORCC_SOURCE_GROUP` target
properties may influence where the generated sources are grouped in the project's
file lists.

.. note::

  Starting with CMake 3.20 the ``GENERATED`` source file property can be set
  and retrieved from any directory scope. It is an all-or-nothing property.
  It also can no longer be removed or unset if it was set to ``TRUE``. Policy
  :policy:`CMP0118` was introduced to allow supporting the ``OLD`` behavior
  for some time.