Bootstrap

makefile多文件编译

如果我们有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是一个伪目标。

;