阅读本文大概需要 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
命令就会生成程序执行文件
往期推荐
往期推荐
公众号后台回复「加群」拉你进技术交流群
公众号后台回复「编程」送你编程面试资料