本文主要是讲解有关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
上面有四组代码行,每一个组称之为一条规则。每条规则的第一行给出了目标文件,跟在后面的是他的依赖文件。第二行就是待执行的命令。
一旦创造了makefile,就能使用make实用程序来构建(或重新构建)该程序了。
一些细节:
makefile中的每个命令前面必须是有一个制表符,而不是一连串的空格。
makefile的名字一般就是Makefile或者makefile ,使用make 实用程序的时候,它会自动在当前目录下搜索具有这些名字的文件。
用下面的命令调用make:
make 目标
make很复杂,一本书也讲不完,作为初学者了解到这里就得嘞,可以去忽悠面试官了。