我正在尝试使用以下语法从 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