项目¶
设置项目的名称。
概要¶
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#)、``CUDA、OBJC``(即 Objective-C)、``OBJCXX ``(即 Objective-C++)、``Fortran、HIP、ISPC、Swift、ASM、ASM_NASM、ASM_MARMASM ,ASM_MASM 和``ASM-ATT``。
在 3.8 版本加入: 添加了
CSharp和CUDA支持。在 3.15 版本加入: 添加了``Swift`` 支持。
在 3.16 版本加入: 添加了
OBJC和OBJCXX支持。在 3.18 版本加入: 添加了
ISPC支持。在 3.21 版本加入: 添加了``HIP`` 支持。
在 3.26 版本加入: 添加了
ASM_MARMASM支持。
如果启用 ASM,请将其列在最后,以便 CMake 可以检查其他语言(如 C 的编译器是否也适用于汇编。
通过 VERSION、DESCRIPTION 和 HOMEPAGE_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) 以启用默认语言(C 和 CXX)。
备注
在顶级 CMakeLists.txt 的顶部附近调用 project() 命令,但*在*调用 cmake_minimum_required() 之后。在调用可能影响其行为的其他命令之前建立版本和策略设置很重要,因此,如果不遵守此命令,project() 命令将发出警告。另请参阅政策:policy:CMP0000。