【发布时间】:2019-07-26 11:38:45
【问题描述】:
我有一个 Makefile,我在其中使用通配符进入所有 src/* 文件夹并在这些子目录中运行 make。
我想以两种形式致电make:
make src/my-project 和 make upload src/my-project
只有upload 目标它可以像预期的那样工作:
SUBDIRS := $(wildcard src/*)
UNAME_S := $(shell uname -s)
TOPTARGETS := upload
ifeq ($(UNAME_S),Linux)
MKFILE = Makefile-Linux.mk
endif
ifeq ($(UNAME_S),Darwin)
MKFILE = Makefile-OSX.mk
endif
$(TOPTARGETS): $(SUBDIRS)
$(SUBDIRS):
$(shell cp ${MKFILE} $@/Makefile)
$(MAKE) -C $@ $(MAKECMDGOALS)
.PHONY: $(TOPTARGETS) $(SUBDIRS)
但如果我通过附加以下内容为make src/my-project 添加第二个目标:
$(SUBDIRS):
$(shell cp ${MKFILE} $@/Makefile)
$(MAKE) -C $@
.PHONY: $(SUBDIRS)
make upload src/my-project 停止工作,因为它首先只运行make src/my-project,现在可以正常工作,但随后显示make: Nothing to be done for 'src/my-project';整个MAKECMDGOALS 不再被使用。由于某种原因,第一个目标似乎不再使用了。
有什么方法可以实现吗?
【问题讨论】: