CMake教程

CMake简介

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性。CMake的所有的语句都写在CMakeLists.txt的文件中。

CMake语法

  • 变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名;
  • 指令(参数 1 参数 2…),参数使用括弧括起,参数之间使用空格或分号分开;
  • 指令是大小写无关的,参数和变量是大小写相关的。但推荐你全部使用大写指令。
  • 以#开头,到行末尾的是注释
  • cmake的构建指令为"cmake path [参数选项]"

外部构建

cmake有两种构建的语法:

cmake .
make

或者

mkdir build
cd build
cmake ..
make

两种方法最大的不同在于执行cmake和make的工作路径不同。
第一种方法中,cmake生成的所有中间文件和可执行文件都会存放在项目目录中;称为“内部构建”。而第二种方法中,中间文件和可执行文件都将存放再build目录中。

第二种方法的优点显而易见,它最大限度的保持了代码目录的整洁。同时由于第二种方法的生成、编译和安装是发生在不同于项目目录的其他目录中,所以第二种方法就叫做“外部构建”。cmake强烈推荐使用外部构建的方法。

CMAKE_EXPORT_COMPILE_COMMANDS选项

默认不开启,开启的两种方法:

  • 在CMakeLists.txt中添加 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  • 在命令行中添加-DCMAKE_EXPORT_COMPILE_COMMANDS=on

开启后,其生成的文件compile_commands.json,包含所有编译单元所执行的指令

CMake命令

cmake_minimum_required命令

cmake_minimum_required (VERSION 2.6)

规定cmake程序的最低版本。这行命令是可选的,我们可以不写这句话,但在有些情况下,如果CMakeLists.txt文件中使用了一些高版本cmake特有的一些命令的时候,就需要加上这样一行,提醒用户升级到该版本之后再执行cmake。

project命令

project (NetLib)

指定项目的名称(CMAKE_PROJECT_NAME)。项目最终编译生成的可执行文件名称则是由ADD_EXECUTABLE命令来指定的。

但是这个项目名称还是必要的,在cmake中有两个预定义变量:
< projectname >_BINARY_DIR以及< projectname >_SOURCE_DIR

比如在我的项目中,两个变量分别为:NetLib_BINARY_DIR和NetLib_SOURCE_DIR。

同时cmake还预定义了PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR变量。

在我的项目中,PROJECT_BINARY_DIR等同于NetLib_BINARY_DIR,PROJECT_SOURCE_DIR等同于NetLib_SOURCE_DIR。

在实际的应用用,我强烈推荐使用PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR变量,这样即使项目名称发生变化也不会影响CMakeLists.txt文件。

内部构建情况下两个变量值相同。在外部构建的情况下,PROJECT_SOURCE_DIR指向的目录同内部构建相同,为CMakeList.txt所在的目录(假定为workDirectory),而PROJECT_BINARY_DIR则有所不同,指向workDirectory/build目录。

SET命令

SET命令可以用来显式的定义变量。如:

SET(CMAKE_INSTALL_PREFIX /usr/local)

CMAKE_INSTALL_PREFIX表示可执行文件的安装路径。

<
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值