在makefile中计算文件路径

时间:2013-04-26 14:34:41

标签: makefile gnu-make

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

我并不热衷于$(子系统)的双重使用,因为依赖于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!

1 个答案:

答案 0 :(得分:3)

依赖于扩展这些变量的顺序没有问题; 必须是真的,或者每个makefile都会破坏。这绝对是有保障的。

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

files_to_be_made := $(foreach S,$(subsystem),$(dir_export)/$S/a21/$S.a21)