本文主要是讲解有关makefile的基础知识,入门级的知识,但是很有用。摘自于《C语言程序设计现代方法》-作者K-N-KIng。
构建大型程序和小型程序的基本步骤是一样的。
编译:对于每个源文件,编译器都会产生一个包含目标代码的文件,这些文件就是目标文件,Unix系统(Linux系统)下扩展名为*.o,windows 下为*.obj.
链接:链接器把上一步产生的目标文件和库函数的代码结合在一起生成可执行程序。
以GCC为例子,下面的命令构建了一个叫做justify的程序,源文件三个,分别是:justify.c line.c word.c 。
gcc -o justify justify.c line.c word.c
为了易于构建大型程序,UNIX系统发明了makefile概念,这个文件包含了构建程序的必要信息。makefile 不仅列出了需要哪些文件,还描述了文件之间的依赖性。假设文件foo.c包含bar.h,那么就说foo.c 依赖于bar.h,因为修改bar.h 之后需要重新编译foo.c。
下面是针对程序justify而设的UNIX系统的makefile,它用GCC进行编译和链接:
justify:justify.o word.o line.o
gcc -o justify justify.o word.o line.o
justify.o: justify.c word.h line.h
gcc -c justify.c
word.o: word.c word.h
gcc -c word.c
line.o: line.c line.h
gcc -c line.c