今天学习一下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