阅读本文大概需要 3 分钟。  

当项目结构复杂时,通过 gcc/g++ 命令直接编译会出现非常多不便之处,于是出现了通过Makefile构建的工具

常用构建工具

Make(Makefile), CMake(CMakelists)

Make

Make工具就是“读取”并执行Makefile文件中的编译指令

Make工作原理

1)make会在当前目录下找名字叫”Makefile“或“makefile”的文件

2)如果找到,它会找文件中的第一个目标文件,作为target目标文件

3)根据target目标文件的prerequisites,来执行对应的target生成目标文件,最终生成目标文件

4)如果target目标文件存在,根据所依赖的后面的 .o 文件的修改时间是否比target目标文件新,来判断是否需要重新生成target目标文件

Makefile介绍

Makefile就是一个包含一堆有条理的gcc/g++编译命令的文件

Makefile语法格式

target: prerequisites
            command

target也就是一个目标文件,可以是Object File,也可以是执行文件,还可以是一个标签(Label)
prerequisites就是要生成那个target所需要的文件或是目标
command也就是make需要执行的shell命令

更多语法可以参考官方文档:https://www.gnu.org/software/make/manual/make.html#Reading

Makefile示例

main.out:main.o sub.o add.o
 gcc -lstdc++ main.o sub.o add.o -o main

sub.o:sub.cpp
 gcc -c sub.cpp -o sub.o

add.o:add.cpp
 gcc -c add.cpp -o add.o

main.o:main.cpp
 gcc -lstdc++ -c main.cpp -o main.o

使用命令

比如执行make 命令就会生成程序执行文件

CMake

下载地址:https://cmake.org/download/

CMake是一种「跨平台」编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用Cmake命令将CMakeLists.txt文件转化为make所需要的Makefile文件,最后用make命令编译源码生成可执行程序或共享库

CMakelists介绍

1)当项目非常庞大后手写Makefile就比较复杂,你需要在不同的目录底下写不同的Makefile,这可能有非常多个。这时候就用CMakelists可以通过更简单的写法来生成对应的Makefile文件

2)软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的Make工具,就得为每一种平台写一次 Makefile;而CMake可以通过CMakeLists.txt文件来产生特定平台的标准的Makefile文件

CMakelists示例

# 指定cmake最低版本
cmake_minimum_required(VERSION 3.15)
# 设置项目名称
project(HELLO)
# 设置变量
set(CMAKE_CXX_STANDARD 14)
# 创建可执行程序工程(
add_executable(HELLO main.cpp add.cpp sub.cpp sub.h)

更多用法可以参考官方教程:https://cmake.org/cmake/help/v3.19/guide/tutorial/index.html#cmake-tutorial

使用命令

比如执行cmake && make 命令就会生成程序执行文件

【c++连载】项目常用构建工具_cmake