Makefile学习笔记 (1)
一. 概述
-
makefile定义了一系列的规则,指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于更复杂的功能。
-
makefile实现了“自动化编译”,只需要一个make命令(解释makefile中指令的命令工具),整个工程完全自动编译。
-
make本质上是在“文件依赖性”上做操作。
二. 关于程序的编译和链接
- 编译compile
无论是C、C++、Java,首先要将源文件编译成中间代码文件,即Window下的.obj文件,Unix下的.o文件(Object File). 这个过程就是编译compile。编译需要注意的是:语法的正确,函数与变量的声明的正确。
- 链接link
将大量的Object File合成执行文件,这个过程就是链接link。链接主要是链接函数和全局变量。很多时候,因为源文件太多,编译生成的Object file太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以需要给中间目标文件打个包,Windows下这种包就是“库文件”library file,即.lib文件,在UNIX下就是Archive File,即.a文件。
归纳:源文件 → 中间目标文件Object → 执行文件。编译时,编译器只检测程序语法、函数和变量是否被声明,若函数未被声明,编译器会给出一个警告,但可以生成Object File。链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,会报链接错误码(Linker Error)
三. Makefile介绍
make命令执行的时候,需要有一个Makefile文件,告诉make命令怎样去编译和链接程序。
1. Makefile的规则:
target … : prerequisites …
command
其中:
-
target是