Makefile 如何使%通配符使规则虚假?

Makefile 如何使%通配符使规则虚假?,makefile,wildcard,gnu-make,Makefile,Wildcard,Gnu Make,我有以下通配符“编程”生成规则,用于将二进制文件上载到设备。这显然不会生成真实的文件,因此应标记为“虚假”。但是,如何将%通配符规则标记为假的 %-tangnano-prog: %-tangnano.fs openFPGALoader -b tangnano $^ .PHONY: %-tangnano-prog clean all 无论你放在那里什么,虚假规则都不会给出任何错误,因此很难判断它是否有效。但我认为它没有: $touch blinky tangno prog $make

我有以下通配符“编程”生成规则,用于将二进制文件上载到设备。这显然不会生成真实的文件,因此应标记为“虚假”。但是,如何将%通配符规则标记为假的

%-tangnano-prog: %-tangnano.fs
    openFPGALoader -b tangnano $^

.PHONY: %-tangnano-prog clean all
无论你放在那里什么,虚假规则都不会给出任何错误,因此很难判断它是否有效。但我认为它没有:

$touch blinky tangno prog
$make blinky Tangno prog
make:“blinky Tangno prog”是最新的。

基本上有两种可能性:

  • 您提前知道您可能遇到的目标是什么。只需将它们的所有前缀分配给make变量,使用make函数计算完整的目标名称,并将它们声明为假的:

     P := blinky foo bar
     T := $(addsuffix -tangnano-prog,$(P))
    
     .PHONY: tangnano-prog $(T)
    
     tangnano-prog: $(T)
    
     %-tangnano-prog: %-tangnano.fs
         openFPGALoader -b tangnano $^
    
  • 你事先不知道你会遇到什么样的目标。使用相同的Makefile,但在命令行上传递要生成的目标前缀列表:

     $ make tangnano-prog P="blinky foo bar"
    

  • #2的另一个选项:添加以下内容:
    .PHONY:$(过滤掉%-tangnano prog,$(MAKECMDGOALS))
    @MadScientist不错,但它不应该是
    过滤掉
    而不是
    过滤掉
    ?哦,是的,抱歉我打字太快了:)哦,我喜欢“疯狂科学家”选项!