project.rst 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. project
  2. -------
  3. Set the name of the project.
  4. Synopsis
  5. ^^^^^^^^
  6. .. code-block:: cmake
  7. project(<PROJECT-NAME> [<language-name>...])
  8. project(<PROJECT-NAME>
  9. [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
  10. [DESCRIPTION <project-description-string>]
  11. [HOMEPAGE_URL <url-string>]
  12. [LANGUAGES <language-name>...])
  13. Sets the name of the project, and stores it in the variable
  14. :variable:`PROJECT_NAME`. When called from the top-level
  15. ``CMakeLists.txt`` also stores the project name in the
  16. variable :variable:`CMAKE_PROJECT_NAME`.
  17. Also sets the variables:
  18. :variable:`PROJECT_SOURCE_DIR`, :variable:`<PROJECT-NAME>_SOURCE_DIR`
  19. Absolute path to the source directory for the project.
  20. :variable:`PROJECT_BINARY_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`
  21. Absolute path to the binary directory for the project.
  22. :variable:`PROJECT_IS_TOP_LEVEL`, :variable:`<PROJECT-NAME>_IS_TOP_LEVEL`
  23. .. versionadded:: 3.21
  24. Boolean value indicating whether the project is top-level.
  25. Further variables are set by the optional arguments described in `Options`_
  26. further below. Where an option is not given, its corresponding variable is
  27. set to the empty string.
  28. Note that variables of the form ``<name>_SOURCE_DIR`` and ``<name>_BINARY_DIR``
  29. may also be set by other commands before ``project()`` is called (see the
  30. :command:`FetchContent_MakeAvailable` command for one example).
  31. Projects should not rely on ``<PROJECT-NAME>_SOURCE_DIR`` or
  32. ``<PROJECT-NAME>_BINARY_DIR`` holding a particular value outside of the scope
  33. of the call to ``project()`` or one of its child scopes.
  34. Options
  35. ^^^^^^^
  36. The options are:
  37. ``VERSION <version>``
  38. Optional; may not be used unless policy :policy:`CMP0048` is
  39. set to ``NEW``.
  40. Takes a ``<version>`` argument composed of non-negative integer components,
  41. i.e. ``<major>[.<minor>[.<patch>[.<tweak>]]]``,
  42. and sets the variables
  43. * :variable:`PROJECT_VERSION`,
  44. :variable:`<PROJECT-NAME>_VERSION`
  45. * :variable:`PROJECT_VERSION_MAJOR`,
  46. :variable:`<PROJECT-NAME>_VERSION_MAJOR`
  47. * :variable:`PROJECT_VERSION_MINOR`,
  48. :variable:`<PROJECT-NAME>_VERSION_MINOR`
  49. * :variable:`PROJECT_VERSION_PATCH`,
  50. :variable:`<PROJECT-NAME>_VERSION_PATCH`
  51. * :variable:`PROJECT_VERSION_TWEAK`,
  52. :variable:`<PROJECT-NAME>_VERSION_TWEAK`.
  53. .. versionadded:: 3.12
  54. When the ``project()`` command is called from the top-level
  55. ``CMakeLists.txt``, then the version is also stored in the variable
  56. :variable:`CMAKE_PROJECT_VERSION`.
  57. ``DESCRIPTION <project-description-string>``
  58. .. versionadded:: 3.9
  59. Optional.
  60. Sets the variables
  61. * :variable:`PROJECT_DESCRIPTION`, :variable:`<PROJECT-NAME>_DESCRIPTION`
  62. to ``<project-description-string>``.
  63. It is recommended that this description is a relatively short string,
  64. usually no more than a few words.
  65. When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
  66. then the description is also stored in the variable :variable:`CMAKE_PROJECT_DESCRIPTION`.
  67. .. versionadded:: 3.12
  68. Added the ``<PROJECT-NAME>_DESCRIPTION`` variable.
  69. ``HOMEPAGE_URL <url-string>``
  70. .. versionadded:: 3.12
  71. Optional.
  72. Sets the variables
  73. * :variable:`PROJECT_HOMEPAGE_URL`, :variable:`<PROJECT-NAME>_HOMEPAGE_URL`
  74. to ``<url-string>``, which should be the canonical home URL for the project.
  75. When the ``project()`` command is called from the top-level ``CMakeLists.txt``,
  76. then the URL also is stored in the variable :variable:`CMAKE_PROJECT_HOMEPAGE_URL`.
  77. ``LANGUAGES <language-name>...``
  78. Optional.
  79. Can also be specified without ``LANGUAGES`` keyword per the first, short signature.
  80. Selects which programming languages are needed to build the project.
  81. .. include:: SUPPORTED_LANGUAGES.txt
  82. By default ``C`` and ``CXX`` are enabled if no language options are given.
  83. Specify language ``NONE``, or use the ``LANGUAGES`` keyword and list no languages,
  84. to skip enabling any languages.
  85. The variables set through the ``VERSION``, ``DESCRIPTION`` and ``HOMEPAGE_URL``
  86. options are intended for use as default values in package metadata and documentation.
  87. .. _`Code Injection`:
  88. Code Injection
  89. ^^^^^^^^^^^^^^
  90. A number of variables can be defined by the user to specify files to include
  91. at different points during the execution of the ``project()`` command.
  92. The following outlines the steps performed during a ``project()`` call:
  93. * .. versionadded:: 3.15
  94. For every ``project()`` call regardless of the project
  95. name, include the file(s) and module(s) named by
  96. :variable:`CMAKE_PROJECT_INCLUDE_BEFORE`, if set.
  97. * .. versionadded:: 3.17
  98. If the ``project()`` command specifies ``<PROJECT-NAME>`` as its project
  99. name, include the file(s) and module(s) named by
  100. :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE`, if set.
  101. * Set the various project-specific variables detailed in the `Synopsis`_
  102. and `Options`_ sections above.
  103. * For the very first ``project()`` call only:
  104. * If :variable:`CMAKE_TOOLCHAIN_FILE` is set, read it at least once.
  105. It may be read multiple times and it may also be read again when
  106. enabling languages later (see below).
  107. * Set the variables describing the host and target platforms.
  108. Language-specific variables might or might not be set at this point.
  109. On the first run, the only language-specific variables that might be
  110. defined are those a toolchain file may have set. On subsequent runs,
  111. language-specific variables cached from a previous run may be set.
  112. * .. versionadded:: 3.24
  113. Include each file listed in :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES`,
  114. if set. The variable is ignored by CMake thereafter.
  115. * Enable any languages specified in the call, or the default languages if
  116. none were provided. The toolchain file may be re-read when enabling a
  117. language for the first time.
  118. * .. versionadded:: 3.15
  119. For every ``project()`` call regardless of the project
  120. name, include the file(s) and module(s) named by
  121. :variable:`CMAKE_PROJECT_INCLUDE`, if set.
  122. * If the ``project()`` command specifies ``<PROJECT-NAME>`` as its project
  123. name, include the file(s) and module(s) named by
  124. :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`, if set.
  125. Usage
  126. ^^^^^
  127. The top-level ``CMakeLists.txt`` file for a project must contain a
  128. literal, direct call to the ``project()`` command; loading one
  129. through the :command:`include` command is not sufficient. If no such
  130. call exists, CMake will issue a warning and pretend there is a
  131. ``project(Project)`` at the top to enable the default languages
  132. (``C`` and ``CXX``).
  133. .. note::
  134. Call the ``project()`` command near the top of the top-level
  135. ``CMakeLists.txt``, but *after* calling :command:`cmake_minimum_required`.
  136. It is important to establish version and policy settings before invoking
  137. other commands whose behavior they may affect and for this reason the
  138. ``project()`` command will issue a warning if this order is not kept.
  139. See also policy :policy:`CMP0000`.