生成文件的规则,文件名中包含可变部分

时间:2015-12-08 10:57:14

标签: gnu-make automake

有源文件:a.asn1b.asn1

首先我需要对它们进行预处理,为标识符添加前缀(不同文件的前缀不同)。

./prefixASN1.pl -file "foo.asn1" -prefix PREF-

执行此操作并将结果输出到PREF-foo.asn1

然后我需要从PREF-foo.asn1生成C解析器。

./snacc -mm PREF-foo.asn1

将创建foo.c和foo.h(没有前缀的文件名)

如何实现与此长文件相同的行为:

a.c a.h: AAA-a.asn1
    ./snacc -mm $<
# serialize
a.h: a.c

b.c b.h: BBB-b.asn1
    ./snacc -mm $<
# serialize
b.h: b.c

AAA-a.asn1: a.asn1
    ./prefixASN1.pl -file $< -prefix AAA-

BBB-b.asn1: b.asn1
    ./prefixASN1.pl -file $< -prefix BBB-

用更短的东西,像这样:

# ??? set PREFIX=AAA for a
# ??? set PREFIX=BBB for b

%.c %.h: $(PREFIX)%.asn1
    ./snacc -mm $<
# serialize
???

$(PREFIX)%.asn1: %.asn1
    ./prefixASN1.pl -file $< -prefix $(PREFIX)

我正在使用autotools和GNU make。

1 个答案:

答案 0 :(得分:0)

我认为在所有文件中使用相同的前缀更为正确。

  • 将源规范重命名为%.unprefixed.asn1
  • 修改了perl脚本以允许自定义输出文件名
  • 定义了几个ASN1_PREFIX_<stem>变量:

_

ASN1_PREFIX_a = AAA-
ASN1_PREFIX_b = BBB-
  • 添加了规则:

_

%.asn1: %.unprefixed.asn1`
    $(PREFIXASN1) -file $< -prefix "$(ASN1_PREFIX_$*)" -outfile $@

%.c %.h: %.asn1
    ...

_

将变量前缀传递给我优先于Computed Variable Names

Target-specific Variable Values的规则