命令project用于设置项目的名称。
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及以上支持):布尔值,指示项目是否是顶层。
注:类似PROJECT_SOURCE_DIR, <PROJECT-NAME>_SOURCE_DIR表示可以有两种表示方法:${PROJECT_SOURCE_DIR}和${${PROJECT_NAME}_SOURCE_DIR。
下面是一个例子,用于展示在顶层的CMakeLists.txt调用project(Cmake_Command_Test)后,输出各变量值:
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Cmake_Command_Test)
# 项目名称保存在PROJECT_NAME
message("project name: ${PROJECT_NAME}")
# 顶层调用CmakeLists.txt ,项目名称保存在CMAKE_PROJECT_NAME
message("cmake project name: ${CMAKE_PROJECT_NAME}")
# 项目源文件的绝对路径 PROJECT_SOURCE_DIR
message("Absolute path to the source directory for the project: ${PROJECT_SOURCE_DIR}")
#message("Absolute path to the source directory for the project: ${${PROJECT_NAME}_SOURCE_DIR}")
# 项目二进制文件的绝对路径 PROJECT_SOURCE_DIR
message("Absolute path to the binary directory for the project: ${PROJECT_BINARY_DIR}")
#message("Absolute path to the binary directory for the project: ${${PROJECT_NAME}_BINARY_DIR}")
# 布尔值,指示项目是否是顶层 PROJECT_IS_TOP_LEVEL 版本3.21及以上支持
message("The project is top-level: ${PROJECT_IS_TOP_LEVEL}")
#message("The project is top-level: ${${PROJECT_NAME}_IS_TOP_LEVEL}")
创建目录build,打开VS命令行工具执行如下命令:
cd build
cmake ..
各变量输出如下,由于这边cmake版本低于3.21,所以PROJECT_IS_TOP_LEVEL为空:
project name: Cmake_Command_Test
cmake project name: Cmake_Command_Test
Absolute path to the source directory for the project: D:/Code/Github/Cmake/command_test
Absolute path to the binary directory for the project: D:/Code/Github/Cmake/command_test/build
The project is top-level:
处理上述变量,其他变量则由下面的可选参数设置,如果没有指定可选参数则变量设置为空。
当指定[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]时,设置以下变量:
PROJECT_VERSION, <PROJECT-NAME>_VERSION
PROJECT_VERSION_MAJOR, <PROJECT-NAME>_VERSION_MAJOR
PROJECT_VERSION_MINOR, <PROJECT-NAME>_VERSION_MINOR
PROJECT_VERSION_PATCH, <PROJECT-NAME>_VERSION_PATCH
PROJECT_VERSION_TWEAK, <PROJECT-NAME>_VERSION_TWEAK
CMAKE_PROJECT_VERSION(版本3.12及以上支持):当从顶层CMakeLists.txt中调用时,同时也设置CMAKE_PROJECT_VERSION。
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Cmake_Command_Test VERSION 23.1.12.55)
# 版本号
message("project version: ${PROJECT_VERSION}, ${${PROJECT_NAME}_VERSION}")
# 当从顶层CMakeLists.txt中调用时,同时也设置CMAKE_PROJECT_VERSION 版本3.12及以上支持
message("cmake project version: ${CMAKE_PROJECT_VERSION}")
message("project version major: ${PROJECT_VERSION_MAJOR}, ${${PROJECT_NAME}_VERSION_MAJOR}")
message("project version minor: ${PROJECT_VERSION_MINOR}, ${${PROJECT_NAME}_VERSION_MINOR}")
message("project version patch: ${PROJECT_VERSION_PATCH}, ${${PROJECT_NAME}_VERSION_PATCH}")
message("project version tweak: ${PROJECT_VERSION_TWEAK}, ${${PROJECT_NAME}_VERSION_TWEAK}")
然后输出结果如下:
project version: 23.1.12.55, 23.1.12.55
cmake project version: 23.1.12.55
project version major: 23, 23
project version minor: 1, 1
project version patch: 12, 12
project version tweak: 55, 55
当指定[DESCRIPTION <project-description-string>]时,设置以下变量:
PROJECT_DESCRIPTION, <PROJECT-NAME>_DESCRIPTION(版本3.9及以上支持):官方建议这个描述是相对较短的字符串,通常几个字。
CMAKE_PROJECT_DESCRIPTION:当从顶层CMakeLists.txt中调用时,同时也设置该变量。并且在版本3.12及以上添加了<PROJECT-NAME>_DESCRIPTION。
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Cmake_Command_Test DESCRIPTION "This is just test")
message("project description: ${PROJECT_DESCRIPTION}, ${${PROJECT_NAME}_DESCRIPTION}")
然后输出结果:
project description: This is just test, This is just test
当指定[HOMEPAGE_URL <url-string>]时,设置以下变量:
PROJECT_HOMEPAGE_URL, <PROJECT-NAME>_HOMEPAGE_URL(版本3.12及以上支持)。
CMAKE_PROJECT_HOMEPAGE_URL:当从顶层CMakeLists.txt中调用时,同时也设置该变量。
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Cmake_Command_Test HOMEPAGE_URL "https://www.baidu.com/")
message("project homepage url: ${PROJECT_HOMEPAGE_URL}, ${${PROJECT_NAME}_HOMEPAGE_URL}")
message("cmake project homepage url: ${CMAKE_PROJECT_HOMEPAGE_URL}")
输出结果如下:
project homepage url: https://www.baidu.com/, https://www.baidu.com/
cmake project homepage url: https://www.baidu.com/
当指定[LANGUAGES <language-name>...]时,可选择项目所需的编程语言。支持的语言包括:C, CXX (i.e. C++), CUDA, OBJC (i.e. Objective-C), OBJCXX, Fortran, HIP, ISPC, and ASM。默认情况下,如果没有指定编程语言,则默认C和CXX。
参考资料:
官方文档:https://cmake.org/cmake/help/latest/command/project.html