【问题标题】:Make: Setting target-specific variables in static pattern rulesMake:在静态模式规则中设置特定于目标的变量
【发布时间】:2017-02-02 22:29:43
【问题描述】:

我正在使用静态模式规则编写 Makefile,我希望为 TARGETS 的每个元素分配一个分配给当前目标名称的变量(这里是词干 '%')。

TARGETS = a b c d

all : $(TARGETS)
$(TARGETS) : % : DIR = %
$(TARGETS) : % : %_setup build

a_setup :
 code for a
b_setup :
 code for b
...
build
 code using "DIR = XX" previously configured

但是 gnumake 抱怨目标特定的变量 DIR:

make: *** No rule to make target 'DIR', needed by 'a'

是否可以混合使用静态模式规则和变量分配?谢谢!

【问题讨论】:

  • 在这种特定情况下,您可以使用TARGET: DIR=$@
  • 您永远不需要这样做。静态模式规则的一个要求是您有一个目标列表......因此您始终可以在该目标列表中使用正常的特定于目标的变量。

标签: makefile gnu-make


【解决方案1】:

根据 GNU make 手册,您不能那样做。但是,您可以使用$@。在您的示例中,您可以直接分配DIR=$@,但更一般地,您可以将$@patsubst 结合使用:

TARGETS = a b c d
all : $(TARGETS)
$(TARGETS) : DIR = $(patsubst %,%,$@)
$(TARGETS) : % : %_setup build
        echo $@: DIR:$(DIR)
%_setup :
        echo $@
build:
        echo $@

【讨论】:

  • Makefile:5: *** target pattern contains no '%'. Stop.我的品牌是GNU Make 4.3+dbg-1.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多