Set the name of the project.


project(<PROJECT-NAME> [<language-name>...])
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])

Sets the name of the project, and stores it in the variable PROJECT_NAME. When called from the top-level CMakeLists.txt also stores the project name in the variable CMAKE_PROJECT_NAME.

Also sets the variables

Further variables are set by the optional arguments described in the following. If any of these arguments is not used, then the corresponding variables are set to the empty string.

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


The options are:

VERSION <version>

Optional; may not be used unless policy CMP0048 is set to NEW.

Takes a <version> argument composed of non-negative integer components, i.e. <major>[.<minor>[.<patch>[.<tweak>]]], and sets the variables

When the project() command is called from the top-level CMakeLists.txt, then the version is also stored in the variable CMAKE_PROJECT_VERSION.

DESCRIPTION <project-description-string>

Optional. Sets the variables

to <project-description-string>. It is recommended that this description is a relatively short string, usually no more than a few words.

When the project() command is called from the top-level CMakeLists.txt, then the description is also stored in the variable CMAKE_PROJECT_DESCRIPTION.

HOMEPAGE_URL <url-string>

Optional. Sets the variables

to <url-string>, which should be the canonical home URL for the project.

When the project() command is called from the top-level CMakeLists.txt, then the URL also is stored in the variable CMAKE_PROJECT_HOMEPAGE_URL.

LANGUAGES <language-name>...

Optional. Can also be specified without LANGUAGES keyword per the first, short signature.

Selects which programming languages are needed to build the project. Supported languages include C, CXX (i.e. C++), CUDA, Fortran, and ASM. 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 enabling ASM, list it last so that CMake can check whether compilers for other languages like C work for assembly too.

The variables set through the VERSION, DESCRIPTION and HOMEPAGE_URL options are intended for use as default values in package metadata and documentation.


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).


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.