0

我需要根据一些子系统名称计算文件路径。请参阅下面的 MWE。请问有没有更简单的方法来实现同样的目标?请参阅下面的我的 aa、ab、ac 和加入方法。

我不热衷于 $(subsystem) 的双重使用,因为它依赖于 make 以相同的顺序执行。我试过使用 $(patsubst) 但它只替换了 % 的第一个实例。请问有什么提示吗?

#
## Given some subsystem names
subsystem := pi_sub_chris \
             pi_sub_rob \
             pi_sub_greg

#
## And an output directory
dir_export := ../pi_sw/export

#
## Calculate a file path in export directory to be made
## Is there a better way to do this!?
aa := $(addprefix $(dir_export)/,$(subsystem))
ab := $(addsuffix /a2l/, $(aa))
ac := $(addsuffix .a2l, $(subsystem))
files_to_be_made := $(join $(ab), $(ac))

.PHONY :
go : $(files_to_be_made)
    @echo Done!

%.a2l :
    @echo A perl script is run here to generate file $@

正确输出:

A perl script is run here to generate file ../pi_sw/export/pi_sub_chris/a2l/pi_sub_chris.a2l
A perl script is run here to generate file ../pi_sw/export/pi_sub_rob/a2l/pi_sub_rob.a2l
A perl script is run here to generate file ../pi_sw/export/pi_sub_greg/a2l/pi_sub_greg.a2l
Done!
4

1 回答 1

3

依赖这些变量的扩展顺序没有问题;这必须是真的,否则几乎每个 makefile 都会中断。这是绝对保证的。

但是,如果你不喜欢它,你可以使用类似的东西:

files_to_be_made := $(foreach S,$(subsystem),$(dir_export)/$S/a21/$S.a21)
于 2013-04-26T15:04:47.293 回答