You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
5.6 KiB
165 lines
5.6 KiB
project
|
|
-------
|
|
|
|
Set the name of the project.
|
|
|
|
Synopsis
|
|
^^^^^^^^
|
|
|
|
.. code-block:: cmake
|
|
|
|
project(<PROJECT-NAME> [<language-name>...])
|
|
project(<PROJECT-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
|
|
:variable:`PROJECT_NAME`. When called from the top-level
|
|
``CMakeLists.txt`` also stores the project name in the
|
|
variable :variable:`CMAKE_PROJECT_NAME`.
|
|
|
|
Also sets the variables:
|
|
|
|
:variable:`PROJECT_SOURCE_DIR`, :variable:`<PROJECT-NAME>_SOURCE_DIR`
|
|
Absolute path to the source directory for the project.
|
|
|
|
:variable:`PROJECT_BINARY_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`
|
|
Absolute path to the binary directory for the project.
|
|
|
|
:variable:`PROJECT_IS_TOP_LEVEL`, :variable:`<PROJECT-NAME>_IS_TOP_LEVEL`
|
|
.. versionadded:: 3.21
|
|
|
|
Boolean value indicating whether the project is top-level.
|
|
|
|
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.
|
|
|
|
Options
|
|
^^^^^^^
|
|
|
|
The options are:
|
|
|
|
``VERSION <version>``
|
|
Optional; may not be used unless policy :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
|
|
|
|
* :variable:`PROJECT_VERSION`,
|
|
:variable:`<PROJECT-NAME>_VERSION`
|
|
* :variable:`PROJECT_VERSION_MAJOR`,
|
|
:variable:`<PROJECT-NAME>_VERSION_MAJOR`
|
|
* :variable:`PROJECT_VERSION_MINOR`,
|
|
:variable:`<PROJECT-NAME>_VERSION_MINOR`
|
|
* :variable:`PROJECT_VERSION_PATCH`,
|
|
:variable:`<PROJECT-NAME>_VERSION_PATCH`
|
|
* :variable:`PROJECT_VERSION_TWEAK`,
|
|
:variable:`<PROJECT-NAME>_VERSION_TWEAK`.
|
|
|
|
.. versionadded:: 3.12
|
|
When the ``project()`` command is called from the top-level
|
|
``CMakeLists.txt``, then the version is also stored in the variable
|
|
:variable:`CMAKE_PROJECT_VERSION`.
|
|
|
|
``DESCRIPTION <project-description-string>``
|
|
.. versionadded:: 3.9
|
|
|
|
Optional.
|
|
Sets the variables
|
|
|
|
* :variable:`PROJECT_DESCRIPTION`, :variable:`<PROJECT-NAME>_DESCRIPTION`
|
|
|
|
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 :variable:`CMAKE_PROJECT_DESCRIPTION`.
|
|
|
|
.. versionadded:: 3.12
|
|
Added the ``<PROJECT-NAME>_DESCRIPTION`` variable.
|
|
|
|
``HOMEPAGE_URL <url-string>``
|
|
.. versionadded:: 3.12
|
|
|
|
Optional.
|
|
Sets the variables
|
|
|
|
* :variable:`PROJECT_HOMEPAGE_URL`, :variable:`<PROJECT-NAME>_HOMEPAGE_URL`
|
|
|
|
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 :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``,
|
|
``OBJC`` (i.e. Objective-C), ``OBJCXX``, ``Fortran``, ``HIP``, ``ISPC``, 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.
|
|
|
|
.. versionadded:: 3.8
|
|
Added ``CUDA`` support.
|
|
|
|
.. versionadded:: 3.16
|
|
Added ``OBJC`` and ``OBJCXX`` support.
|
|
|
|
.. versionadded:: 3.18
|
|
Added ``ISPC`` support.
|
|
|
|
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.
|
|
|
|
Code Injection
|
|
^^^^^^^^^^^^^^
|
|
|
|
If the :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` or
|
|
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE` variables are set,
|
|
the files they point to will be included as the first step of the
|
|
``project()`` command.
|
|
If both are set, then :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` will be
|
|
included before :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`.
|
|
|
|
If the :variable:`CMAKE_PROJECT_INCLUDE` or
|
|
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE` variables are set, the files
|
|
they point to will be included as the last step of the ``project()`` command.
|
|
If both are set, then :variable:`CMAKE_PROJECT_INCLUDE` will be included before
|
|
:variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`.
|
|
|
|
.. versionadded:: 3.15
|
|
Added the ``CMAKE_PROJECT_INCLUDE`` and ``CMAKE_PROJECT_INCLUDE_BEFORE``
|
|
variables.
|
|
|
|
.. versionadded:: 3.17
|
|
Added the ``CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`` variable.
|
|
|
|
Usage
|
|
^^^^^
|
|
|
|
The top-level ``CMakeLists.txt`` file for a project must contain a
|
|
literal, direct call to the ``project()`` command; loading one
|
|
through the :command:`include` command is not sufficient. If no such
|
|
call exists, CMake will issue a warning and pretend there is a
|
|
``project(Project)`` at the top to enable the default languages
|
|
(``C`` and ``CXX``).
|
|
|
|
.. note::
|
|
Call the ``project()`` command near the top of the top-level
|
|
``CMakeLists.txt``, but *after* calling :command:`cmake_minimum_required`.
|
|
It is important to establish version and policy settings before invoking
|
|
other commands whose behavior they may affect.
|
|
See also policy :policy:`CMP0000`.
|