今天学习一下Make file的编写,make工具是用于多文件的编译的汇编工具。好处在于,当使用make编译过一次程序后,会记录每一个文件的时间戳,当修改某些文件后,再次使用make工具编译时,他只会编译修改过时间戳的文件这样相比gcc *.c节省了大量的时间,另外,make可以有选择性的对指定的文件进行编译。 make工具需要自己去写,一般文件的名称为Makefile **编写Makefile文件**
第一版本:
#目标文件:依赖文件 #tab gcc具体的编译流程 main:main.o doublelist.o mymath.o gcc main.o doublelist.o mymath.o -o main main.o:main.c gcc -c main.c -o main.o doublelist.o:doublelist.c doublelist.h gcc -c doublelist.c -o doublelist.o mymath.o:mymath.c gcc -c mymath.c -o mymath.o
第二版本:
CC=gcc #CC=arm-linux-gcc OBJ=main FILE=main.o doublelist.o mymath.o #附加编译选项#-Wall:显示所有警告 #-g:用于gdb调试 #-O2:优化最终生成的可执行文件 #-c:汇编阶段所需 CFLAGS=-Wall -g -O2 -c $(OBJ):$(FILE) $(CC) $(FILE) -o $(OBJ) main.o:main.c $(CC) $(CFLAGS) main.c -o main.o doublelist.o:doublelist.c $(CC) $(CFLAGS) doublelist.c -o doublelist.o mymath.o:mymath.c $(CC) $(CFLAGS) mymath.c -o mymath.o clean: $(RM) $(FILE) $(OBJ)
第三版本:
$@ 目标名
$< 依赖文件列表中的第一个文件
$^ 依赖文件列表中除去重复文件的部分
CC=gcc #CC=arm-linux-gcc OBJ=main FILE=main.o doublelist.o mymath.o #附加编译选项 #-Wall:显示所有警告 #-g:用于gdb调试 #-O2:优化最终生成的可执行文件 #-c:汇编阶段所需 CFLAGS=-Wall -g -O2 -c $(OBJ):$(FILE) $(CC) $^ -o $@ main.o:main.c $(CC) $(CFLAGS) $< -o $@ doublelist.o:doublelist.c $(CC) $(CFLAGS) $< -o $@ mymath.o:mymath.c $(CC) $(CFLAGS) $< -o $@ clean: $(RM) $(FILE) $(OBJ)
第四版本:
CC=gcc OBJ=main FILE=main.o doublelist.o mymath.o CFLAGS=-Wall -g -O2 -c $(OBJ):$(FILE) $(CC) $^ -o $@ %*.o:%*.c $(CC) $(CFLAGS) $< -o $@ clean: $(RM) $(FILE) $(OBJ)
使用:
在终端直接敲:make
如果要删除.o和可执行文件:make clean