假设work文件夹下有三个文件夹a,b,c.各自可以独立编译成一个目标,且a,b,c文件夹下已经存在makefile。在work下面写一个总的makefile来调用a,b,c各自的makefile
在写一个clean,清理所有target
TARGET=a b c
LDIR=$(shell pwd) #LDIR=/work
CTARGET=$(foreach n,$(TARGET),$(LDIR)/$n) #/work/a /work/b /work/c
all:$(TARGET)
#多目标编译
$(TARGET):
$(MAKE) -C $(LDIR)/$@ -f $(LDIR)/$@/makefile
#多目标清理
clean:$(CTARGET)
$(CTARGET):
$(MAKE) -C $@ -f $@/makefile clean
.PHONY:$(TARGET) all clean $(CTARGET)
#需要设置成伪目标,因为a,b,c并不是执行文件,只是文件夹的名字。
#$@指代$(TARGET). 这样执行make,等于是make all,all是默认的项目。
#自动推导的时候就会一次执行a,b,c。如果不写all的话,make,执行的只是make a, a是默认的项目。
#观察make命令,其中—C表示切换工作目录,切换以后,会在该目录下寻找源文件
#不能有相同的伪目标名字,否则会冲突,所以一个用CTARGET(全路径),一个用TARGET(相对路径)
#函数$(foreach),foreach是函数名,总共三个参数,不同的参数用逗号隔开,表示把TARGET里的元素一个个取出来,赋值给n,然后拼接成$(LDIR)/$n
多目标安装和卸载
TARGET=a b c
LDIR=$(shell pwd) #LDIR=/work
CTARGET=$(foreach n,$(TARGET),$(LDIR)/$n) #/work/a /work/b /work/c
ITAG=_install
UTAG=_uninstall
ITARGET=$(foreach n,$(TARGET),$(LDIR)/$

本文介绍如何在work目录下通过一个总Makefile协调a、b、c子目录中的独立Makefile,实现各目标的编译。同时提供了一个clean规则以清除所有目标,并探讨了多目标的安装和卸载方法。
最低0.47元/天 解锁文章
920

被折叠的 条评论
为什么被折叠?



