Makefile:目标匹配依赖项

时间:2016-06-17 03:55:24

标签: makefile

我在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/whatevercoverage/gomq/consumers/whatever等目录中进一步匹配。所以目录中的一些软件包无法测试。有什么方法可以纠正吗?感谢。

实际上,如果目录中已存在文件,并且我再次运行make,则目标将不匹配。

0 个答案:

没有答案