项目

设置项目的名称。

概要

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

设置项目名称,并将其存储在变量 PROJECT_NAME 中。当从顶级 CMakeLists.txt 调用时,还将项目名称存储在变量 CMAKE_PROJECT_NAME 中。

还设置变量:

PROJECT_SOURCE_DIR<PROJECT-NAME>_SOURCE_DIR

项目源目录的绝对路径。

PROJECT_BINARY_DIR<PROJECT-NAME>_BINARY_DIR

项目二进制目录的绝对路径。

PROJECT_IS_TOP_LEVEL<PROJECT-NAME>_IS_TOP_LEVEL

在 3.21 版本加入.

指示项目是否为顶级的布尔值。

其他变量由以下描述的可选参数设置。如果未使用这些参数中的任何一个,则相应的变量将设置为空字符串。

选项

选项是:

版本<版本>

选修的;除非策略:policy:CMP0048 设置为 NEW,否则不得使用。

采用由非负整数分量组成的“<version>”参数,即“<major>[.<minor>[.<patch>[.<tweak>]]]”,并设置变量

在 3.12 版本加入: 当从顶级 CMakeLists.txt 调用 project() 命令时,版本也存储在变量 CMAKE_PROJECT_VERSION 中。

DESCRIPTION <project-description-string>

在 3.9 版本加入.

选修的。设置变量

到``<project-description-string>``。建议这个描述是一个比较短的字符串,一般不要超过几个字。

当从顶级 CMakeLists.txt 调用 project() 命令时,描述也存储在变量 CMAKE_PROJECT_DESCRIPTION 中。

在 3.12 版本加入: 添加了``<PROJECT-NAME>_DESCRIPTION`` 变量。

HOMEPAGE_URL <url-string>

在 3.12 版本加入.

选修的。设置变量

<url-string>,它应该是项目的规范主页 URL。

当从顶级 CMakeLists.txt 调用 project() 命令时,URL 也存储在变量 CMAKE_PROJECT_HOMEPAGE_URL 中。

语言 <语言名称>...

选修的。也可以在没有 LANGUAGES 关键字的情况下指定第一个短签名。

选择构建项目所需的编程语言。

支持的语言是``C``、CXX``(即 C++)、``CSharp``(即 C#)、``CUDAOBJC``(即 Objective-C)、``OBJCXX ``(即 Objective-C++)、``FortranHIPISPCSwiftASMASM_NASMASM_MARMASMASM_MASM 和``ASM-ATT``。

在 3.8 版本加入: 添加了 CSharpCUDA 支持。

在 3.15 版本加入: 添加了``Swift`` 支持。

在 3.16 版本加入: 添加了 OBJCOBJCXX 支持。

在 3.18 版本加入: 添加了 ISPC 支持。

在 3.21 版本加入: 添加了``HIP`` 支持。

在 3.26 版本加入: 添加了 ASM_MARMASM 支持。

如果启用 ASM,请将其列在最后,以便 CMake 可以检查其他语言(如 C 的编译器是否也适用于汇编。

通过 VERSIONDESCRIPTIONHOMEPAGE_URL 选项设置的变量旨在用作包元数据和文档中的默认值。

代码注入

用户可以定义许多变量,以指定在执行 project() 命令期间在不同点包含的文件。下面概述了在 project() 调用期间执行的步骤:

  • 在 3.15 版本加入: 对于每个 project() 调用,无论项目名称如何,都包含由 CMAKE_PROJECT_INCLUDE_BEFORE 命名的文件(如果已设置)。

  • 在 3.17 版本加入: 如果 project() 命令指定 <PROJECT-NAME> 作为其项目名称,则包含由 CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE 命名的文件(如果已设置)。

  • 设置上面“概要”和“选项”部分中详述的各种项目特定变量。

  • 仅对于第一个 project() 调用:

    • 如果设置了 CMAKE_TOOLCHAIN_FILE,请至少读取一次。它可能会被多次阅读,也可能在稍后启用语言时再次阅读(见下文)。

    • 设置描述主机和目标平台的变量。此时可能会或可能不会设置特定于语言的变量。在第一次运行时,唯一可能定义的特定于语言的变量是工具链文件可能已设置的变量。在后续运行中,可以设置从上一次运行缓存的特定于语言的变量。

    • 在 3.24 版本加入: 包括 CMAKE_PROJECT_TOP_LEVEL_INCLUDES 中列出的每个文件(如果已设置)。此后,CMake 将忽略该变量。

  • 启用调用中指定的任何语言,如果未提供,则启用默认语言。首次启用语言时可能会重新读取工具链文件。

  • 在 3.15 版本加入: 对于每个 project() 调用,无论项目名称如何,都包含由 CMAKE_PROJECT_INCLUDE 命名的文件(如果已设置)。

  • 如果 project() 命令指定 <PROJECT-NAME> 作为其项目名称,则包含由 CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE 命名的文件(如果已设置)。

用法

项目的顶级 CMakeLists.txt 文件必须包含对 project() 命令的直接调用;通过 include() 命令加载一个是不够的。如果不存在这样的调用,CMake 将发出警告并假装顶部有一个 project(Project) 以启用默认语言(CCXX)。

备注

在顶级 CMakeLists.txt 的顶部附近调用 project() 命令,但*在*调用 cmake_minimum_required() 之后。在调用可能影响其行为的其他命令之前建立版本和策略设置很重要,因此,如果不遵守此命令,project() 命令将发出警告。另请参阅政策:policy:CMP0000