我试图执行以下代码。
LIST = 0 1 3 4 5
targets = $(addprefix rambo, $(LIST))
all: $(targets)
$(targets): rambo%: rambo%.sh
@echo "" > tests/runners/$<
我得到的错误如下,
make[1]:*** No rule to make target `rambo0.sh', needed by `rambo0'. Stop.
我不确定代码有什么问题。基本上,我正在尝试通过执行makefile来动态创建文件。
提前致谢。
答案 0 :(得分:1)
该错误表示您当前目录中没有rambo0.sh
文件。
静态模式规则的语法是targets ...: target-pattern: prereq-patterns ...
。
其中targets
是文字目标名称,
[e]将目标与目标模式匹配以提取部分 目标名称,称为词干。这个茎被取代 每个先决条件模式来制作先决条件名称(一个来自 每个先决条件)。
因为这似乎是你想用这个规则创建的,我相信你想要的:
targets = $(addsuffix .sh,$(addprefix rambo,$(LIST)))
# Alternatively
# targets = $(patsubst %,rambo%.sh,$(LIST))
$(targets): rambo%.sh :
可能
$(targets): rambo%.sh : rambo%
如果rambo%
是已存在的文件或目录,并且是您尝试创建的shell脚本文件的先决条件。