我在Makefile中有一个命令:
# just a list of all package names separated by newline:
# gomq/consumers/aaa
# gomq/rock
PKGS=$(shell go list ./...)
# Coverage output dirs: coverage/$PKG/coverage.out
COVPKGS=$(addsuffix /coverage.out,$(addprefix coverage/,$(PKGS)))
final-command: coverage/all.out
some-commands
coverage/all.out: $(COVPKGS)
echo "mode: set" >$@
grep -hv "mode: set" $(wildcard $^) >>$@
coverage/gomq/consumers/%:
@ mkdir -p $(dir $@)
@ go test -coverprofile $@ $(patsubst coverage/%/coverage.out,%,$@) -redisAddr=$(REDIS_SERVER)
coverage/gomq/%:
@ mkdir -p $(dir $@)
@ go test -coverprofile $@ $(patsubst coverage/%/coverage.out,%,$@)
所以我在$(COVPKGS)
中得到了一个目录列表,我希望将列表与coverage/gomq/consumers/%
和coverage/gomq/%
进行模式匹配,以便为不同的目录触发不同的命令。
我认为Make计算出这些依赖关系并尝试将它们与目标匹配,因此coverage/gomq/consumers/%
将与消费者目标匹配,coverage/gomq/%
将与其他目标匹配。
但是当我运行它时,它只能与coverage/gomq/whatever
匹配,无法在coverage/gomq/whatever/whatever
或coverage/gomq/consumers/whatever
等目录中进一步匹配。所以目录中的一些软件包无法测试。有什么方法可以纠正吗?感谢。
实际上,如果目录中已存在文件,并且我再次运行make,则目标将不匹配。