# SOURCES

This specifies the list of paths to source files for the target. The following commands all set or add to the `SOURCES` target property and are the usual way to manipulate it:

- `add_executable()`

- `add_library()`

- `add_custom_target()`

- `target_sources()`

Contents of `SOURCES` may use `generator expressions`. If a path starts with a generator expression, it is expected to evaluate to an absolute path. Not doing so is considered undefined behavior.

Paths that are for files generated by the build will be treated as relative to the build directory of the target, if the path is not already specified as an absolute path. Note that whether a file is seen as generated may be affected by policy `CMP0118`.

If a path does not start with a generator expression, is not an absolute path and is not a generated file, it will be treated as relative to the location selected by the first of the following that matches:

- If a file by the specified path exists relative to the target's source directory, use that file.

- If policy `CMP0115` is not set to `NEW`, try appending each known source file extension to the path and check if that exists relative to the target's source directory.

- Repeat the above two steps, this time relative to the target's binary directory instead.

Note that the above decisions are made at generation time, not build time.

See the `cmake-buildsystem(7)` manual for more on defining buildsystem properties.