目录
0. 扫盲
1. 编译,链接
2. Makefile文件执行
3. Makefile书写规则
4. 案例
5. Makefile是如何工作的
6. 拔高,参考
0. 扫盲
Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员(是不是夸张了点,别人说的)。
什么是makefile文件?它是一个指挥文件,指挥着源文件编译的先后顺序,以及如何链接在一起。
1. 编译,链接
2. Makefile文件执行
写好Makefile(或写成makefile)文件后,直接执行命令make,编译器会自动执行makefile里的命令,进行编译、链接知道生成最终可以执行的文件。即
3. Makefile书写规则
其中
- target是可以是目标文件(.o)也可以是可执行文件,还可以是个标签(最后说)
- objects是生成target依赖的文件
- command是make要执行的文件(可以是任意Shell命令)
- 特殊字符:$@:目标文件,$^:所有的依赖文件,$<:第一个依赖文件
4. 案例
假设文件的关系如下图
写法1
参数 -o 后面是可执文件; -c后面是待编译的文件。在前两行中写了很多重复的.o文件,可以把它集合起来,用变量表示,如下:
写法2
GUN的make相当强大,它可以自动推导文件集文件依赖关系,写法如下:
写法3
文件执行完了以后生成很多.o文件,能不能可以删除掉,可以的,写上命令(例如clean),下面是执行的操作,例如:
写法4
这样执行 make clean,就会执行rm *.o 删除所有的.o文件,即
5. Makefile如何工作的?
- 输入make后,会在目录找Makefile、makefile
- 如果找到,它会在文件中找到第一个目标文件(例子中的main2)作为最终的目标文件
- 如果main2不存在,就依靠后边的.o文件生成
- 如果后边的.o不存在,就利用下边的g++ -c 生成
- .o文件都够了,就链接生成最终的目标文件
6. 拔高,参考
跟我一起写Makefile-陈皓