Makefile中变量的使用(二)

首先让我们来看一个例子

edit: main.o kbd.o command.o
        gcc -o edit main.o kbd.o command.o

在这里我们发现所有的.o文件都被使用了两次,如果我们的工程需要加入新的.o文件,那么我们需要添加两次(其实是三次,因为我们一般会在末尾加上clean)。为了Makefile的易维护性,我们在Makefile中使用变量,变量也就是一个字符串。那么我们可以作如下的修改

objects = main.o kdb.o command.o
edit:$(objects)
        gcc -o edit $(objects)
main.o:main.c defs.h buffer.h
        gcc -c main.c
kdb.o:kbd.c buffer.h
        gcc -c kbd.c
command.o:command.c defs.h
        gcc -c command.c
clean:
        rm edit $(objects)

当我们有新的.o文件加入时,只需要修改objects对象即可

————————————————————————————————————
make的自动推导
GNU的make很强大,它可以自动推导文件以及文件的依赖关系后面的命令,所以我们没有必要在每一个.o文件后都写上相似的命令,因为make会自动识别,并且自动推导
只要make看到一个.o文件,它就会自动把.c文件加到依赖关系中,例如我们需要main.o那么就会找到main.c文件,并且gcc -c main.c也会被推导出来,所以我们就没有必要写的这么复杂,上面的例子我们可以写成这样子

objects  = main.o kdb.o command.o
edit:$(objects)
        gcc -o edit $(objects)
main.o: defs.h buffer.h
kbd.o: defs.h
command.o: buffer.h
.PHONY:clean
clean:
        rm edit $(objects)

这里是make的隐晦规则,其中.PHONY表示clean是一个伪目标文件

参考资料

教你写Makefile

猜你喜欢

转载自blog.csdn.net/weixin_42580207/article/details/81237737
今日推荐