【问题标题】:How can you make a % wildcard make rule phony?您如何使 % 通配符使规则变得虚假?
【发布时间】:2021-01-11 09:23:04
【问题描述】:

我有以下通配符“编程”生成规则,可将二进制文件上传到设备。这显然不会产生一个真实的文件,所以应该被标记为假的。但是,如何将 %% 通配符规则标记为虚假?

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

.PHONY: %-tangnano-prog clean all

无论你放什么,虚假规则都不会给出任何错误,所以很难判断它是否有效。但我相信它没有:

$ touch blinky-tangnano-prog
$ make blinky-tangnano-prog
make: 'blinky-tangnano-prog' is up to date.

【问题讨论】:

    标签: makefile wildcard gnu-make


    【解决方案1】:

    基本上有两种可能:

    1. 您提前知道您可以遇到哪些%-tangnano-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 $^
      
    2. 你事先并不知道你会遇到什么目标。使用相同的 Makefile,但传递目标前缀列表以在命令行上构建:

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

    【讨论】:

    • #2 的另一个选项:添加:.PHONY: $(filter-out %-tangnano-prog,$(MAKECMDGOALS))
    • @MadScientist 不错,但不应该是 filter 而不是 filter-out?
    • 哦,对不起,我打字太快了:)
    • 哦,我喜欢疯狂科学家的选项!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多