程序模块的内部关系决定了源程序编译和链接的顺序。通过建立makefile可以描述模块间的 相互依赖关系。make命令从中读取这些信息,然后根据这些信息对程序进行管理和维护。在makefile 里主要提供的是有关目的文件与依靠文件之间的关系,还指明了用什么命令生成和更新目标文件。有了这些信息,make会检查磁盘上的文件,如果目的文件的时间标志(该文件生成或被改动时的时间)比它的任意一个依靠文件旧,make就执行相应的命令,以便更新目的文件(目的文件不一定是最后的可执行文件,它可以是任何一个文件)。 makefile规则的格式: 目标[属性] 分隔符号 [依赖文件][;命令列] {命令列} 例: #this is a makefile
GCC=gcc
OBJS=main.o prog1.o prog2.o prog3.o
CFLAGS=-O
myprog: main.o prog1.o prog2.o prog3.o ——myprog:$(OBJS)
gcc -o -O myprog main.o prog1.o prog2.o prog3.o --$(CC) -o $(FLAGS) myprog $(OBJS)
main.o: main.c libi.h ---main.o: main.c libi.h
gcc -c -O main.c --$(CC) -c $(FLAGS) main.c
prog1.o:prog1.c lib1.h ---prog1.o:prog1.c lib1.h
gcc -c -O prog1.c ---$(CC) -c $(FLAGS) prog1.c
prog2.o:prog2.c ---prog2.o:prog2.c
gcc -c-O prog2.c ---$(CC) -c $(FLAGS) prog2.c
prog3.o:prog3.c lib2.h ---prog3.o:prog3.c lib2.h
gcc -c -O prog3.c ---$(CC) -c $(FLAGS) prog3.c
clean:#伪目标 ---clean:#伪目标
rm *.o ---rm *.o
rm myprog--- rm myprog
在makefile中使用宏定义能大大简化makefile的书写