我需要为以下情况编写模式规则:
A
和B
python gen.py --a=A/file1.foo --b=file2.bar --c=file3.bar
会生成B/file1.foo
file1
,file2
和file3
是不同的字符串有没有办法在某种多维数组中对这些文件名进行分组,以便所有文件只写一次(我将使用python语法):
files = [["a1.foo", "a2.bar", "a3.bar"],
#...200 other groups...
["b1.foo", "b2.bar", "b3.bar"]]
然后规则如下:
$(files): B/{reference 1 elem}: A/{1 elem} {2 elem} {3 elem}
python gen.py --a=A/{1 elem} --b={2 elem} --c={3 elem}
任何想法如何存档?
答案 0 :(得分:2)
您可以使用标准的make语法:
all :
targets :=
define add_target
B/${1}: A/${1} ${2} ${3}
targets += B/${1}
endef
# Build dependencies.
$(eval $(call add_target,a1.foo,a2.bar,a3.bar))
# ...
$(eval $(call add_target,b1.foo,b2.bar,b3.bar))
# One generic rule for all ${targets}
${targets} : % :
@echo Making $@ from $^
all : ${targets}
.PHONY: all
请注意,这些$(eval $(call add_target,...)
对空格不敏感,请勿在其中插入空格。
如果您希望make
自动创建输出目录,请执行以下操作:
${targets} : % : | B
B :
mkdir $@
答案 1 :(得分:0)
有时重复一点也不是那么糟糕
targets := B/a1.foo B/b1.foo
.PHONY: all
all: $(targets)
$(targets): B/%: A/%
python gen.py --a=$< --b=$(word 2,$^) --c=$(word 3,$^)
B/a1.foo: a2.bar a3.bar
B/b1.foo: b2.bar b3.bar