我有一个参数空间,比如 A={1,2},B={u,v},我需要为每对 (a,b)
创建一个文件在A x B
。
我需要生成的是一组 Makefile 目标,例如:
file_1_u.csv:
./run_program --A 1 --B u > file_1_u.csv
file_1_v.csv:
./my_program --A 1 --B v > file_1_u.csv
file_2_u.csv:
./run_program --A 2 --B u > file_1_u.csv
file_2_v.csv:
./my_program --A 2 --B v > file_1_u.csv
是否可以生成目标并在每个生成的目标中使用相关参数?
PS: 我知道可以使用变量创建目标,但是$@
仅给出完整的目标名称(例如 file_1_u.csv
)。相反,我需要 a
和b
单独将它们作为参数传递给 my_program
.
最佳答案
一般来说,在 makefile 中处理模式中的 1 个以上元素需要 eval、$$、include 和其他非直接处理。
但是,在您的具体示例中,有一个明显的替换可以像这样使用:
A:=1 2
B:=u v
l:=$(foreach a, $(A), $(foreach b, $(B), $(a)_$(b)))
all: $(l:%=file_%.csv)
file_%.csv:
./run_program --A $(subst _, --B ,$*) > $@
关于makefile - 参数化 Makefile 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872269/