- cmakelists.txt 文件名严格区分大小写
- cmake指令可以不区分大小写,大小写混写都行,每条语句不需要加分号;
- 参数严格区分大小写,名称只能用字母、数字、下划线、破折号
- 使用${}来引用 , 参数之间使用空格分割
- 使用 # 可以做注释
project( [...])
或
project(
[version [.[.[.]]]]
[description ]
[homepage_url ]
[languages ...])
project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(version关键字)、简短的描述(description关键字)、ag真人游戏主页url(homepage_url关键字)和编译工程使用的语言(languages关键字)。
- project_name:将当前工程的名称赋值给project_name,同时${project_name}变量赋值为project_name。
- version:指定工程的版本号。
- description:对工程的文本描述。
- homepage_url:指定工程的ag真人游戏主页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
_description
cmake_project_description**
示例4 homepage_url用法
project (mytest homepage_url “https://www.xxx(示例).com”)
以下变量会被赋值
**project_homepage_url
_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、
_source_dir、project_binary_dir、 _binary_dir等)。但是version、description、homepage_url等选项对应的变量不会被赋值(languages例外,即使不指定,默认语言为c和cxx)。 - project命令需要放置在其他命令调用之前,在cmake_minimum_required命令之后。
- 如果多次调用project命令,那么cmake_project_name、cmake_project_version、cmake_project_description、cmake_project_homepage_url等变量是以最近一次调用的project命令为准