Makefile:需要执行存储在列表中的命令

时间:2014-09-15 14:22:55

标签: linux makefile gnu-make

我试图执行以下代码。

    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来动态创建文件。

提前致谢。

1 个答案:

答案 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脚本文件的先决条件。