CMake——Cross platform Make
- CMake是一个开源的跨平台自动化建构系统,用来管理程序构建,不相依于特定编译器,不用亲自编写Makefile。
- 需要编写CMakeList.txt文件来定制整个编译流程
- 可以自动化编译源代码、创建库、生成可执行二进制文件等
安装方法
Linux:
$ sudo apt-get install cmake
$ sudo apt-get install cmake-gui #图形化界面,两者都可以
Windows:直接在官网下载对应安装包即可
CMake使用注意事项
CMakeLists.txt文件
- CMake构建专用定义文件,文件名
CMakeLists.txt
严格区分大小写 - 工程存在多个目录,可以使用一个
CMakeLists.txt
管理,也可以=每个目录都放一个CMakeLists.txt
CMake指令
- CMake指令不区分大小写,自己设定风格
- add_executable(main main.c)和ADD_EXECUTABLE(main main.c)都可以
参数和变量
- 严格区分大小写,名称只能是字母,数字,下划线,破折号
- 用${}引用变量
- 参数之间使用空格间隔
简单样例
编写helloSLAM.cpp
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
cout << "Hello SLAM!" << endl;
return 0;
}
在同一目录下新建一个CMakeList.txt文件,内容如下:
# 声明要求的 cmake 最低版本
cmake_minimum_required(VERSION 2.8)
# 声明一个 cmake 工程
project(HelloSLAM)
# 添加一个可执行程序,用指定的源文件为工程添加可执行文件,名字为demo
# 一般程序名和源代码文件的名字是一样的,这里为了方便区分
# 语法:add_executable( 程序名 源代码文件 )
add_executable(demo helloSLAM.cpp)
CMakeLists.txt文件用于告诉cmake要对这个目录下的文件做什么事情。在这个示例中,我们指定了一个工程名和一个可执行程序。
在终端中输入
$ cmake .
输出如下:
此时工程目录下的文件:
cmake会输出一些编译信息,然后再当前目录下生成一些中间文件,其中最重要的就是MakeFile,这是一个自动化编译的脚本。由于MakeFile是自动生成的,我们不必修改它。
现在,用make命令对工程进行编译:
$ make
终端输出:
如果顺利通过,我们就可以得到再CMakeLists.txt中声明的那个可执行程序demo。执行它:
$ ./demo
终端输出: