# CSourceSet

API Documentation: | `CSourceSet`

Note: This class is incubating and may change in a future version of Gradle.

A set of C source files.

A C source set contains a set of source files, together with an optional set of exported header files.

    apply plugin: "c"

    model {
        components {
            main(NativeLibrarySpec) {
                sources {
                    c {
                        source {
                            srcDirs "src/main/cpp", "src/shared/c++"
                            include "**/*.c"
                        }
                        exportedHeaders {
                            srcDirs "src/main/include"
                        }
                    }
                }
            }
        }
    }

### Properties

Property | Description
`buildDependencies` | Returns a dependency which contains the tasks which build this artifact. All `Buildable` implementations must ensure that the returned dependency object is live, so that it tracks changes to the dependencies of this buildable.
`buildTask` | Incubating The 'lifecycle' task associated with the construction of this element.
`exportedHeaders` | Incubating The headers as a directory set.
`libs` | Incubating The libraries that this source set requires.
`preCompiledHeader` | Incubating The pre-compiled header configured for this source set.
`source` | Incubating The source files.

### Methods

Method | Description
`builtBy(tasks)` | Incubating Adds a task that is required for the construction of this element. A task added this way is then added as a dependency of the associated lifecycle task.
`exportedHeaders(config)` | Incubating Configure the exported header directories.
`lib(library)` | Incubating Adds a library that this source set requires. This method accepts the following types:
`source(config)` | Incubating Configure the sources

### Script blocks

No script blocks

### Property details

#### `TaskDependency` `buildDependencies` (read-only)

Returns a dependency which contains the tasks which build this artifact. All `Buildable` implementations must ensure that the returned dependency object is live, so that it tracks changes to the dependencies of this buildable.

#### `Task` `buildTask`

Note: This property is incubating and may change in a future version of Gradle.

The 'lifecycle' task associated with the construction of this element.

#### `SourceDirectorySet` `exportedHeaders` (read-only)

Note: This property is incubating and may change in a future version of Gradle.

The headers as a directory set.

#### ``Collection`<?>` `libs` (read-only)

Note: This property is incubating and may change in a future version of Gradle.

The libraries that this source set requires.

#### `String` `preCompiledHeader`

Note: This property is incubating and may change in a future version of Gradle.

The pre-compiled header configured for this source set.

#### `SourceDirectorySet` `source` (read-only)

Note: This property is incubating and may change in a future version of Gradle.

The source files.

### Method details

#### `void` `builtBy`(``Object`...` tasks)

Note: This method is incubating and may change in a future version of Gradle.

Adds a task that is required for the construction of this element. A task added this way is then added as a dependency of the associated lifecycle task.

#### `void` `exportedHeaders`(``Action`<? super `SourceDirectorySet`>` config)

Note: This method is incubating and may change in a future version of Gradle.

Configure the exported header directories.

#### `void` `lib`(`Object` library)

Note: This method is incubating and may change in a future version of Gradle.

Adds a library that this source set requires. This method accepts the following types:

- A `NativeLibrarySpec`
- A `NativeDependencySet`
- A `LanguageSourceSet`
- A `Map` containing the library selector.

The Map notation supports the following String attributes:

- project: the path to the project containing the library (optional, defaults to current project)
- library: the name of the library (required)
- linkage: the library linkage required ['shared'/'static'] (optional, defaults to 'shared')

#### `void` `source`(``Action`<? super `SourceDirectorySet`>` config)

Note: This method is incubating and may change in a future version of Gradle.

Configure the sources