如果我们有11个文件,由一个main.c文件,5个别的 .c文件, 5个.h文件组成。如何让它们生成可执行文件。
target:main.o 1.o 2.o 3.o 4.o 5.o #target是要生成的目标文件,后面main.o是主文
#件,其他是依赖文件。
gcc -o target main.o 1.o 2.o 3.o 4.o 5.o #这里是将mian.o文件生成目标文件,后面跟目标
#文件。
main.o:main.c main.h 1.h 2.h 3.h 4.h #生成mian.o文件
gcc -c main.c
1.o : 1.c 1.h
gcc -c 1.c
2.o : 2.c 2.h
gcc -c 2.c
3.o : 3.c 3.h
gcc -c 3.c
4.o : 4.c 4.h
gcc -c 4.h
5.o : 5.c
gcc -c 5.c
clean : #执行 make clean可以清楚生成的所有文件
rm -f *.o
rm -f target
在编写makefile之前,我们要搞清楚谁是谁的依赖文件,比如上面的,main的依赖文件是(1-5).c的文件,那么编译时,其后面就要跟上mian所需要的文件。如果编译1.c为1.o文件时,它需要别的文件支持它编译,那么在画面也要跟上它依赖文件。比如:
gcc -c 1.c 2.o 3.o #后面.o文件是它的依赖文件。
总结:多文件编译是编译main文件,如果它需要依赖,按照关系,编译时将它们跟在后面,这样在编译是,需要依赖文件,它会在后面寻找。
makefile的隐晦规则:
说白了就是make会一些规则进行推到。具体什么规则,我们可以看看下面例子。
SUORCES += main.o 1.o 2.o 3.o 4.o
target:$(SUORCES)
gcc -o target $(SUORCES)
main.o:main.h 1.h 2.h 3.h 4.h
1.o:1.h
2.o:2.h
3.o:3.h
4.o:4.h
5.o:
.PHONY:clean
rm -f $(SUORCES)
rm -f target
可以定义一个SUORCES将所有同类型的文件加入到里面,如上也是makefile文件所支持的。
只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个1.o,那么1.c,就会是1.o的依赖文件。并且 cc -c 1.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。
.PHONY是一个伪目标。