菜鸟笔记
提升您的技术认知

CMake project

cmake使用注意事项

  1. CMakeLists.txt 文件名严格区分大小写
  2. CMake指令可以不区分大小写,大小写混写都行,每条语句不需要加分号;
  3. 参数严格区分大小写,名称只能用字母、数字、下划线、破折号
  4. 使用${}来引用 , 参数之间使用空格分割
  5. 使用 # 可以做注释

语法

project( [...])
或
project(
[VERSION [.[.[.]]]]
[DESCRIPTION ]
[HOMEPAGE_URL ]
[LANGUAGES ...])

作用

project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、简短的描述(DESCRIPTION关键字)、主页URL(HOMEPAGE_URL关键字)和编译工程使用的语言(LANGUAGES关键字)。

参数

  1. PROJECT_NAME:将当前工程的名称赋值给PROJECT_NAME,同时${PROJECT_NAME}变量赋值为PROJECT_NAME。
  2. VERSION:指定工程的版本号。
  3. DESCRIPTION:对工程的文本描述。
  4. HOMEPAGE_URL:指定工程的主页URL。
  5. LANGUAGES选项:选择构建工程需要的编程语言。

举例

假设当前系统的cmake版本为3.10.2

示例1 基础用法

project(pro_test)

当定义了project()后,一下cmake自带变量会自动赋值

  1. PROJECT_NAME:将当前工程的名称赋值给PROJECT_NAME,对于本例子,就是${PROJECT_NAME}=mytest。
  2. PROJECT_SOURCE_DIR:当前工程的源码路径。
  3. _SOURCE_DIR:指定工程的源码路径,这个变量和PROJECT_SOURCE_DIR的区别就是,_SOURCE_DIR跟具体的工程名字关联起来,若就是当前工程,则该变量和PROJECT_SOURCE_DIR相等。
  4. PROJECT_BINARY_DIR:当前工程的二进制路径。
  5. _BINARY_DIR:指定工程的二进制路径,这个变量和PROJECT_BINARY_DIR的区别就是,_BINARY_DIR跟具体的工程名字关联起来,若就是当前工程,则该变量和PROJECT_BINARY_DIR相等。
  6. 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”)

更多细节

  1. 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)。
  2. project命令需要放置在其他命令调用之前,在cmake_minimum_required命令之后。
  3. 如果多次调用project命令,那么CMAKE_PROJECT_NAME、CMAKE_PROJECT_VERSION、CMAKE_PROJECT_DESCRIPTION、CMAKE_PROJECT_HOMEPAGE_URL等变量是以最近一次调用的project命令为准