Makefile在编程过程中经常被使用到,笔试或面试过程中也经常有被提到,因此需要好好学习一下哦。本篇博文为大家介绍三种makefile编写版本,这三个版本采用循序渐进的方式。可能有一些小伙伴对版本1比较熟悉,因为平时书上都是这么讲的,并且你平时也是这么编写的,对吧?当看到版本2时,有点熟悉,但不是特别理解。版本3就直接蒙圈了,这是啥啊?(开始怀疑人生了……)呵呵,不要紧张慢慢来,看了这篇博文你就都会了。
本篇博文模拟了一个大家都熟悉的场景,方便初学者对makefile的理解。
场景介绍:add.c、sub.c、mul.c、dvd.c分别完成加减乘除的运算,由main.c文件来调用。
以下为makefile的三个版本,供大家参考。
版本1
# 目标文件 : 依赖文件
# tab cmd(注意:命令前必须至少有一个【tab】)
main : main.o add.o sub.o mul.o dvd.o
gcc main.o add.o sub.omul.o dvd.o -o main
main.o : main.c
gcc main.c -c -o main.o
add.o : add.c
gcc -c add.c
sub.o : sub.c
gcc -c sub.c
mul.o : mul.c
gcc -c mul.c
dvd.o : dvd.c
gcc -c dvd.c
版本2
main : main.o add.o sub.o mul.o dvd.o
gcc $^ -o $@ # $^ 代表所有依赖文件
# $@ 代表目标文件
main.o : main.c
gcc $< -c -o $@ #$< 代表第一个依赖文件
add.o : add.c
gcc $< -c -o $@
sub.o : sub.c
gcc $< -c -o $@
mul.o : mul.c
gcc $< -c -o $@
dvd.o : dvd.c
gcc $< -c -o $@
clean: #当上述命令执行失败或make cleam将执行以下命令
rm -rf *.o
版本3(企业版)
OBJECTS=main.o \ # “\”延续到下一行
add.o \
sub.o \
mul.o \
dvd.o
main : $(OBJECTS) # $(OBJECTS)为变量OBJECTS的值
gcc $^ -o $@ #$^ 代表所有依赖文件
#$@ 代表目标文件
# 让所有的*.c自动生成对应的*.o
# 定义变量CC=gcc
CC=gcc
.c.o:
$(CC) -c $< -o $@
clean:
rm -rf $(OBJECTS)