GNU不构建目标

时间:2016-09-14 01:32:20

标签: gnu-make

我想遵守以下规则:

foo_% bar_%:
        @echo "Complex building instructions for $@"

all: foo_xyz bar_xyz

然后运行'make all'并获取:

Complex building instructions for foo_xyz
Complex building instructions for bar_xyz

但是,因为'%'匹配相同的字符串两次(xyz),它只是第一次“构建”,所以我得到的只是第一行。

当'$ @'第二次不同时,有没有办法让GNU make执行'echo'两次?毕竟,由于$ @不同,构建说明不同:/

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,多个模式目标的行为与正常目标不同:Make会考虑负责制作所有模式的配方。

解决此问题的方法是使用define:

define complex-rule
$1:
    @echo "Complex building instructions for $$@"
endef

$(eval $(call complex-rule,foo_%))
$(eval $(call complex-rule,bar_%))

all: foo_xyz bar_xyz

请注意,由于它是eval,因此我将$@转发到$$@,因为我希望在配方运行时将其展开,而不是在eval时它。另一方面,我没有逃避$1,因为我希望第一个参数扩展到call