Win10 下引入 makefile
今天 C++ 课上初步介绍了 Linux 下 makefile 的编写,总体来说非常方便,而且更加有利于我们理解 C/C++ 的运行机制,于是我想把它搬运到 Win10 环境使用。
首先确保预先配置好 MinGW,下面介绍的是 vscode 下的使用。
我们在 Win10 下使用的 make,其实是 …/MinGW/bin/ 下的 mingw32-make.exe 这个可执行文件,你可以选择把它改名为 make.exe, 与 Linux 保持一致,或者干脆保持原名,当然还有很多其他的方式,这里不作展开。
vscode 下创建一个新文件夹,点击工具栏中的终端 => 配置默认生成任务,修改出现的 tasks.json,如下图:

F5,会自动生成一个 launch.json,无需做多少改动。
初步编写 makefile
首先我写了个简单的 C++ 程序 main.cpp,作为演示:

makefile 的基本组成单位格式如下:
target...: prerequisite... command...
我们一般会在最后添加一个
clean: command...
作为一个清除 make 生成文件的方法。
这样,当我们输入命令 make clean,我们就会执行 command 的内容。
于是我编写了如下文件作为上面 main.cpp 的 makefile:

简单解释一下:
第一二行,test.exe 是我们的目标文件,main.o 是我们生成目标文件所需要的文件,在这个过程中我们需要用到的命令是 g++ main.o -o test.exe。三四行类似,不做介绍。
五六行,是我们运行 make clean 时执行的 shell 命令,del *.o *.exe,也就是删除当前目录下所有 .o .exe 后缀的文件。
当文件变得更多…
我们引入了新的头文件和源文件,add.h 和 add.cpp,来为我们的程序添加加法运算的函数,这个时候我们就不得不修改我们的 makefile 了。
// add.h #ifndef __ADD_H__ #define __ADD_H__ int add(int x, int y); #endif
// add.cpp #include "add.h" int add(int x, int y) { return x + y; }
// main.cpp #include <iostream> #include "add.h" int main() { std::cout << add(5, 6) << std::endl; return 0; }
于是我们修改 makefile 为:

然而问题来了,随着我们程序的体量不断变大,这样的 makefile 会变得难以维护。这就是我们接下来要讨论的。
makefile++
变量
引入变量
${变量名},这点和 shell 脚本很像。
变量的定义
变量名 = 变量要替代的文本(无需引号,如果文本过长,可以用 \ 来多行输入)
或 变量名 := 变量需要替代的文本。二者的区别是, = 的 rhs 可以使用后文定义的变量,而 := 的 rhs 只能使用前文定义好的变量。
例如:
k = ${object} object = main.o add.o test.exe: ${object} g++ ${k} -o test.exe
这么写就无法成功 make。
变量追加值
例如: object += subduct.o
变量覆写
使用 override,目的是让 makefile 中定义的变量可以覆盖 make 命令参数中变量的值。
目标变量
目标名: 变量定义,这种写法使得定义的变量只对某一个目标起作用。
%.o: %.cpp
%.o 代表了所有需要的 .o 文件的集合,%.cpp 类似。
自动变量

根据上面的规则,我们的 makefile 修改如下:

进阶参考链接
本文大概记录这么多,更多内容可见:https://www.cnblogs.com/wang_yb/p/3990952.html 这篇文章,写的非常详细。
学到了很多 膜拜大牛
🐖
win
nbiw