如何使用 shell echo 命令将文件附加到 GNU Makefile 目标中



我正在尝试使用以下语法从 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 函数是一种严重的反模式,因为配方中的每一行都已经由 shell 运行。 它只是令人困惑,并且可能导致使用shell功能时出现许多问题。

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

直接写就行了:

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

最新更新