| source_group | |
| ------------ | |
| Define a grouping for source files in IDE project generation. | |
| There are two different signatures to create source groups. | |
| Synopsis | |
| ^^^^^^^^ | |
| .. parsed-literal:: | |
| source_group(`\<group\>`_ [FILES <src>...] [REGULAR_EXPRESSION <regex>] | |
| [FILE_SETS <fileset>... TARGET <target>]...) | |
| source_group(`TREE`_ <root> [PREFIX <prefix>] [FILES <src>...]) | |
| Overview | |
| ^^^^^^^^ | |
| Defines a group into which sources will be placed in project files. | |
| This is intended to set up file tabs in Visual Studio. | |
| The group is scoped in the directory where the command is called, and applies | |
| to sources in targets created in that directory. | |
| If the file set or the source file matches multiple groups, the *last* group | |
| that explicitly lists the file set with ``FILE_SETS`` or the file with | |
| ``FILES`` will be favored, if any. | |
| To determine the group of a source file, the algorithm used is as follows: | |
| 1. The file is part of a file set: | |
| a. Use the :prop_fs:`SOURCE_GROUP` file set property if any. | |
| b. Search for the *last* group which explicitly lists this file set. | |
| 2. The file is not part of a file set or no group was defined for this file | |
| set: | |
| a. Use the :prop_sf:`SOURCE_GROUP` source property if any. | |
| b. Search for the *last* group which explicitly lists this source file. | |
| 3. If no group explicitly lists the file set or the file, the *last* group | |
| whose regular expression matches the file will be favored. | |
| The ``<group>`` and ``<prefix>`` arguments may contain forward | |
| slashes or backslashes to specify subgroups. Backslashes need to be escaped | |
| appropriately: | |
| .. code-block:: cmake | |
| source_group(base/subdir ...) | |
| source_group(outer\\inner ...) | |
| source_group(TREE <root> PREFIX sources\\inc ...) | |
| .. versionadded:: 3.18 | |
| Allow using forward slashes (``/``) to specify subgroups. | |
| Commands | |
| ^^^^^^^^ | |
| .. signature:: | |
| source_group(<group> [FILES <src>...] [REGULAR_EXPRESSION <regex>] | |
| [FILE_SETS <fileset>... TARGET <target>]...) | |
| :target: <group> | |
| The options are: | |
| ``<group>`` | |
| The name of the group. | |
| ``FILES <src>...`` | |
| Any source file specified explicitly will be placed in group | |
| ``<group>``. Relative paths are interpreted with respect to the | |
| current source directory. | |
| .. versionadded:: 4.3 | |
| Arguments to ``FILES`` may use | |
| :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
| ``REGULAR_EXPRESSION <regex>`` | |
| Any source file whose name matches the regular expression will | |
| be placed in group ``<group>``. | |
| ``FILE_SETS <fileset>...`` | |
| .. versionadded:: 4.5 | |
| List of file sets. Files of these file sets will be placed in group | |
| ``<group>``. Arguments to ``FILE_SETS`` may use | |
| :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
| See the :manual:`cmake-buildsystem(7)` manual for more details on | |
| :ref:`File Sets`. | |
| ``TARGET <target>`` | |
| .. versionadded:: 4.5 | |
| Associate the file sets declared with the previous ``FILE_SETS`` keyword | |
| with the target ``<target>``. | |
| .. note:: | |
| The pattern ``FILE_SETS <fileset>... TARGET <target>`` can be repeated | |
| multiple times. | |
| .. signature:: | |
| source_group(TREE <root> [PREFIX <prefix>] [FILES <src>...]) | |
| .. versionadded:: 3.8 | |
| The options are: | |
| ``TREE <root>`` | |
| CMake will automatically detect, from ``<src>`` files paths, source groups | |
| it needs to create, to keep structure of source groups analogically to the | |
| actual files and directories structure in the project. Paths of ``<src>`` | |
| files will be cut to be relative to ``<root>``. The command fails if the | |
| paths within ``src`` do not start with ``root``. | |
| ``PREFIX <prefix>`` | |
| Source group and files located directly in ``<root>`` path, will be placed | |
| in ``<prefix>`` source groups. | |
| ``FILES <src>...`` | |
| List of files used to create source group structure. Relative paths are | |
| interpreted with respect to the current source directory. | |
| .. versionadded:: 4.3 | |
| Arguments to ``FILES`` may use | |
| :manual:`generator expressions <cmake-generator-expressions(7)>`. | |
| Legacy Support | |
| ^^^^^^^^^^^^^^ | |
| For backwards compatibility, the short-hand signature | |
| .. code-block:: cmake | |
| source_group(<name> <regex>) | |
| is equivalent to | |
| .. code-block:: cmake | |
| source_group(<name> REGULAR_EXPRESSION <regex>) |