project — CMake 4.0.2 Documentation (original) (raw)

Set the name of the project.

Synopsis

project( [...]) project( [VERSION [.[.[.]]]] [DESCRIPTION ] [HOMEPAGE_URL ] [LANGUAGES ...])

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

Also sets the variables:

PROJECT_SOURCE_DIR, _SOURCE_DIR

Absolute path to the source directory for the project.

PROJECT_BINARY_DIR, _BINARY_DIR

Absolute path to the binary directory for the project.

PROJECT_IS_TOP_LEVEL, _IS_TOP_LEVEL

Added in version 3.21.

Boolean value indicating whether the project is top-level.

Further variables are set by the optional arguments described in Optionsfurther below. Where an option is not given, its corresponding variable is set to the empty string.

Note that variables of the form <name>_SOURCE_DIR and <name>_BINARY_DIRmay also be set by other commands before project() is called (see theFetchContent_MakeAvailable() command for one example). Projects should not rely on <PROJECT-NAME>_SOURCE_DIR or<PROJECT-NAME>_BINARY_DIR holding a particular value outside of the scope of the call to project() or one of its child scopes.

Changed in version 3.30: <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, and<PROJECT-NAME>_IS_TOP_LEVEL, if already set as normal variables whenproject(<PROJECT-NAME> ...) is called, are updated by the call. Cache entries by the same names are always set as before. See release notes for 3.30.3, 3.30.4, and 3.30.5 for details.

Changed in version 3.31: <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, and<PROJECT-NAME>_IS_TOP_LEVEL are always set as normal variables byproject(<PROJECT-NAME> ...). See policy CMP0180. Cache entries by the same names are always set as before.

Options

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

Added in version 3.12: When the project() command is called from the top-levelCMakeLists.txt, then the version is also stored in the variableCMAKE_PROJECT_VERSION.

DESCRIPTION <project-description-string>

Added in version 3.9.

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.

Added in version 3.12: Added the <PROJECT-NAME>_DESCRIPTION variable.

HOMEPAGE_URL <url-string>

Added in version 3.12.

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 are C, CXX (i.e. C++), CSharp (i.e. C#), CUDA,OBJC (i.e. Objective-C), OBJCXX (i.e. Objective-C++), Fortran, HIP,ISPC, Swift, ASM, ASM_NASM, ASM_MARMASM, ASM_MASM, and ASM-ATT.

Added in version 3.8: Added CSharp and CUDA support.

Added in version 3.15: Added Swift support.

Added in version 3.16: Added OBJC and OBJCXX support.

Added in version 3.18: Added ISPC support.

Added in version 3.21: Added HIP support.

Added in version 3.26: Added ASM_MARMASM support.

If enabling ASM, list it last so that CMake can check whether compilers for other languages like C work for assembly too.

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.

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

Code Injection

A number of variables can be defined by the user to specify files to include at different points during the execution of the project() command. The following outlines the steps performed during a project() call:

Usage

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 issue a warning and pretend there is aproject(Project) at the top to enable the default languages (C and CXX).

Note

Call the project() command near the top of the top-levelCMakeLists.txt, but after calling cmake_minimum_required(). It is important to establish version and policy settings before invoking other commands whose behavior they may affect and for this reason theproject() command will issue a warning if this order is not kept. See also policy CMP0000.