# project

Set a name, version, and enable languages for the entire project.

    project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])
    project(<PROJECT-NAME>
            [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
            [LANGUAGES <language-name>...])

Sets the name of the project and stores the name in the `PROJECT_NAME` variable. Additionally this sets variables

- `PROJECT_SOURCE_DIR`, `<PROJECT-NAME>_SOURCE_DIR`
- `PROJECT_BINARY_DIR`, `<PROJECT-NAME>_BINARY_DIR`

If `VERSION` is specified, given components must be non-negative integers. If `VERSION` is not specified, the default version is the empty string. The `VERSION` option may not be used unless policy `CMP0048` is set to `NEW`.

The `project()` command stores the version number and its components in variables

- `PROJECT_VERSION`, `<PROJECT-NAME>_VERSION`
- `PROJECT_VERSION_MAJOR`, `<PROJECT-NAME>_VERSION_MAJOR`
- `PROJECT_VERSION_MINOR`, `<PROJECT-NAME>_VERSION_MINOR`
- `PROJECT_VERSION_PATCH`, `<PROJECT-NAME>_VERSION_PATCH`
- `PROJECT_VERSION_TWEAK`, `<PROJECT-NAME>_VERSION_TWEAK`

Variables corresponding to unspecified versions are set to the empty string (if policy `CMP0048` is set to `NEW`).

Optionally you can specify which languages your project supports. Example languages are `C`, `CXX` (i.e. C++), `Fortran`, etc. By default `C` and `CXX` are enabled if no language options are given. Specify language `NONE`, or use the `LANGUAGES` keyword and list no languages, to skip enabling any languages.

If a variable exists called `CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`, the file pointed to by that variable will be included as the last step of the project command.

The top-level `CMakeLists.txt` file for a project must contain a literal, direct call to the `project()` command; loading one through the `include()` command is not sufficient. If no such call exists CMake will implicitly add one to the top that enables the default languages (`C` and `CXX`).

Note

Call the `cmake_minimum_required()` command at the beginning of the top-level `CMakeLists.txt` file even before calling the `project()` command. It is important to establish version and policy settings before invoking other commands whose behavior they may affect. See also policy `CMP0000`.