Makefile中的通用(非文件)模式匹配
是否可以为非文件名设置通配符目标,例如:Makefile中的通用(非文件)模式匹配,makefile,design-patterns,Makefile,Design Patterns,是否可以为非文件名设置通配符目标,例如: build-%: pull-% build-%.stamp pull-%: cd $* ; git log HEAD..origin/master | grep -q . && ( git pull ; $(RM) ../build-$*.stamp ) || true build-%.stamp: cd $* ; ant touch $@ 其思想是调用make build foo,它只会在有新的上游更改时调用构建(这些更改
build-%: pull-% build-%.stamp
pull-%:
cd $* ; git log HEAD..origin/master | grep -q . && ( git pull ; $(RM) ../build-$*.stamp ) || true
build-%.stamp:
cd $* ; ant
touch $@
其思想是调用make build foo
,它只会在有新的上游更改时调用构建(这些更改会被拉入)
但是,%
-模式匹配似乎仅适用于文件名,即使在.PHONY中定义扩展表单(“build foo”)时也是如此
我必须使用模板吗,如中所用?啊!在
build-%
规则后放一个分号
(我没有注意到这个问题,因为我在规则中添加了一个命令:
@echo$@
)这在GNUMake 3.81中似乎已经足够好了。你用的是什么牌子的?同样的,GNUmake3.81。像上面那样使用Makefilemakebuildfoo
会导致make:**。别说了,对我来说还不够好。我现在使用了模板方法,效果很好。