如何使用 shell echo 命令在 GNU Makefile 目标中追加文件

How to use shell echo command to append a file inside a GNU Makefile target

我正在尝试使用以下语法从 make 目标中将一些文本附加到文件中

$shell(echo "module load ABC/$$(MODULE_LOAD)" >> $@/_env/local/filexyz)

但是 GNU Make 4.2.1 抱怨以下内容。

/bin/sh: -c: line 21: syntax error near unexpected token echo 

总而言之,我希望文件 PQR/_env/local/filexyz 在最后一行包含以下文本

module load ABC/4.5.6

首先,make 函数的语法错误;应该是 $(shell ...) 而不是 $shell(...).

其次,我假设这实际上出现在食谱中,因为您正在使用 $@。提问时请包含足够的细节,以便我们可以看到整个上下文,例如整个食谱,而不仅仅是一行。

在写菜谱的时候使用shell功能是很严重的anti-pattern,因为菜谱中的每一行都是已经运行 通过 shell。使用 shell 函数会造成很多问题。

第三,您不想转义变量 $$(MODULE_LOAD),因为这会导致 shell 到 运行 一个可能不存在的命令 MODULE_LOAD .

直接写就可以了:

    echo "module load ABC/$(MODULE_LOAD)" >> $@/_env/local/filexyz