我需要根据一些子系统名称计算文件路径。见下面的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!
答案 0 :(得分:3)
依赖于扩展这些变量的顺序没有问题; 必须是真的,或者每个makefile都会破坏。这绝对是有保障的。
但是,如果你不喜欢它,你可以使用类似的东西:
files_to_be_made := $(foreach S,$(subsystem),$(dir_export)/$S/a21/$S.a21)