CMake 是一个 跨平台的 项目构建工具,CMake不过就是比makefile更高级一些,makefile不仅写起来繁琐,并且不同平台有所差异。
我们知道一个C/C++程序从源代码变为可执行程序需要经过 预处理(.i)->编译(.s)->汇编(.o)->链接(可执行) 四个阶段。如果我们一个项目当中的源文件较少,我们可以通过命令行来直接对源文件进行编译,但是如果是一个大项目当中进行编译,命令会变得特别的长且繁琐,并且不容易维护,易出错。
我们有两个办法来解决:
1、编写makefile,对makefile文件进行编写指令,让makefile告诉编译器该如何执行命令。然后我们需要使用 make 批处理命令,将makefile文件中所有的指令全部执行完毕。
2、我们使用CMake来构建项目,我们需要再CMakeLists.txt文件中编写CMake脚本,使用 cmake CMakeLists.txt文件路径 来对CMake进行构建makefile文件。
安装一个CMake工具,我们需要准备Linux环境,并且使用VSCode远程连接Linux,一般Linux都是自带CMake工具的,如果没有就安装一下CMake。使用 cmake --version 查看当前CMake版本。
以下是代码示例:
add.cpp:
#include <cstdio>
#include "head.h"
const char* libVersion = "Library Version 1.0";
int add(int a, int b)
{
auto number = 8;
return a + b;
}div.cpp:
#include <cstdio>
#include "head.h"
double divide(int a, int b)
{
return (double)a / b;
}multi.cpp:
#include <cstdio>
#include "head.h"
int multiply(int a, int b)
{
return a * b;
}sub.cpp:
#include <cstdio>
#include "head.h"
int subtract(int a, int b)
{
return a - b;
}head.h:
#ifndef _HEAD_H
#define _HEAD_H
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
double divide(int a, int b);
#endifmain.cpp:
#include <iostream>
#include <cstdio>
#include "head.h"
using std::endl;
using std::cout;
using std::cin;
int main()
{
int a = 20;
int b = 12;
cout << "a = " << a << ", b = " << b << endl;
cout << "a + b = " << add(a, b) << endl;
cout << "a - b = " << subtract(a, b) << endl;
cout << "a * b = " << multiply(a, b) << endl;
cout << "a / b = " << divide(a, b) << endl;
return 0;
}我们可以直接通过命令行来编译源文件:

我们使用CMake来构建项目,我们就需要先在当前面目录下新建一个 CMakeLists.txt 文件,这个文件每一个字母都不能错。
注释行:CMake使用#作为行注释,可以放在任意位置:
# 这是一个CMake文件
cmake_minimum_required(VERSION 3.15)
project(test)块注释:使用 #[[]] 形式进行块注释:
#[[这是一个块注释
wadubafa wad
fawawwidaf
awdfwawaf ]]cmake_mininum_required 来指定使用的cmake的最低版本。这是一个可选命令,非必须,如果不加可能会有警告。但是我们最好指定一下我们使用CMake的版本,因为CMake3.0与CMake3.15在语法层面就有些许差别,我们尽量指定CMake3.15以上版本的使用。cmake_minimum_required(VERSION 3.15)project(<PROJECT-NAME> [<language-name> ...]) # 指定项目的项目名称;作为分隔符,add_executeable(可执行程序名称 源文件名称)cmake 命令了。cmake CMakeLists.txt文件所在路径xzy@iZ0jle4p97d8x4byf3u32mZ:~/cmake/version0$ tree . ├── add.cpp ├── build ├── CMakeLists.txt ├── div.cpp ├── head.h ├── main.cpp ├── multi.cpp ├── mybin └── sub.cpp
这是文件目录结构,如果我们在当前目录编译CMakeLists.txt文件,我们直接使用 cmake . 如果我们想要在build目录下编译,我们可以使用 cmake .. 来编译。
cmake_minimum_required(VERSION 3.15)
project(test)
add_executable(mybin add.cpp div.cpp multi.cpp sub.cpp main.cpp)
这些都是由CMake编译得来的,我们发现也自动生成了makefile文件,那么我们执行make命令就可以得到可执行程序了:

我们可以看到,除了我们想要的makefile文件之外,还生成了一些其他的文件,而这些文件在当前目录就会显得非常杂乱,所以我们可以新建一个文件夹,在文件夹中执行cmake命令,让生成的文件全部都在新建目录下:

这样目录结构就会变得更加清晰:

这个时候去到build目录中运行可执行程序:
