语法
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命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、简短的描述(DESCRIPTION关键字)、主页URL(HOMEPAGE_URL关键字)和编译工程使用的语言(LANGUAGES关键字)。
参数
- PROJECT_NAME:将当前工程的名称赋值给PROJECT_NAME,同时${PROJECT_NAME}变量赋值为PROJECT_NAME。
- VERSION:指定工程的版本号。
- DESCRIPTION:对工程的文本描述。
- HOMEPAGE_URL:指定工程的主页URL。
- LANGUAGES选项:选择构建工程需要的编程语言。
举例
假设当前系统的cmake版本为3.10.2
示例1 基础用法
project(pro_test)
当定义了project()后,一下cmake自带变量会自动赋值
-
PROJECT_NAME:将当前工程的名称赋值给PROJECT_NAME,对于本例子,就是${PROJECT_NAME}=mytest。
-
PROJECT_SOURCE_DIR:当前工程的源码路径。
-
_SOURCE_DIR:指定工程的源码路径,这个变量和PROJECT_SOURCE_DIR的区别就是,_SOURCE_DIR跟具体的工程名字关联起来,若就是当前工程,则该变量和PROJECT_SOURCE_DIR相等。
-
PROJECT_BINARY_DIR:当前工程的二进制路径。
-
_BINARY_DIR:指定工程的二进制路径,这个变量和PROJECT_BINARY_DIR的区别就是,_BINARY_DIR跟具体的工程名字关联起来,若就是当前工程,则该变量和PROJECT_BINARY_DIR相等。
-
CMAKE_PROJECT_NAME:顶层工程的名称。例如当前调用的CMakeLists.txt位于顶层目录(可以理解为使用cmake命令首次调用的那个CMakeLists.txt),那么工程名还会赋值给CMAKE_PROJECT_NAME。
示例2 VERSION用法
project (mytest VERSION 1.2.3.4)
除示例1 中的变量更改外,还会更改PROJECT_VERSION
示例3 DESCRIPTION用法
project (pro_test DESCRIPTION “This is my test project.”)
以下变量会被赋值
**PROJECT_DESCRIPTION
<PROJECT-NAME>_DESCRIPTION
CMAKE_PROJECT_DESCRIPTION**
示例4 HOMEPAGE_URL用法
project (mytest HOMEPAGE_URL “https://www.XXX(示例).com”)
以下变量会被赋值
**PROJECT_HOMEPAGE_URL
<PROJECT-NAME>_HOMEPAGE_URL
CMAKE_PROJECT_HOMEPAGE_URL**
示例4 LANGUAGES用法
该选项可以有两种调用方式:一种是直接跟在工程名后面,可以省略LANGUAGES关键字;另一种是跟在其他关键字(例如VERSION)后面,LANGUAGES关键字不能省略。
project (pro_test “CXX”)
更多细节
- project命令并非必不可少,如果没有调用project命令,cmake仍然会生成一个默认的工程名“Project”,以及工程名对应的变量(例如PROJECT_NAME、CMAKE_PROJECT_NAME、PROJECT_SOURCE_DIR、<PROJECT_NAME>_SOURCE_DIR、PROJECT_BINARY_DIR、<PROJECT_NAME>_BINARY_DIR等)。但是VERSION、DESCRIPTION、HOMEPAGE_URL等选项对应的变量不会被赋值(LANGUAGES例外,即使不指定,默认语言为C和CXX)。
- project命令需要放置在其他命令调用之前,在cmake_minimum_required(参考https://www.jianshu.com/p/7535bff0e894
)命令之后。
- 如果多次调用project命令,那么CMAKE_PROJECT_NAME、CMAKE_PROJECT_VERSION、CMAKE_PROJECT_DESCRIPTION、CMAKE_PROJECT_HOMEPAGE_URL等变量是以最近一次调用的project命令为准
参考
Cmake命令之project介绍