将文件复制到带有日期时间的文件名在 bash 中有效,但在 makefile 中无效

将文件复制到带有日期时间的文件名在 bash 中有效,但在 makefile 中无效

以下工作在 bash shell 中进行

cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

但不在 makefile 中。我如何解决它?

这是生成文件:

b:
    cp abc.tex "abc-$(date +"%Y-%m-%-d-%H-%M-%S").tex"

当我执行“make b”时,bash 说:

cp abc.tex "abc-.tex"

答案1

在 Makefile 中,$(...)表示多字符变量的扩展make。您没有make名为 的变量date +"%Y-%m-%-d-%H-%M-%S",因此它被替换为空字符串。

make要让使用execute$(...)作为命令替换的shell ,请将其写为$$(...)

b:
        cp abc.tex "abc-$$(date +"%Y-%m-%-d-%H-%M-%S").tex"

GNUmake变体make也具有$(shell ...)与 shell 中的命令替换类似的工作方式。

答案2

也许您正在寻找$(shell ...)宏。

b:
    cp abc.tex "abc-$(shell date +"%Y-%m-%-d-%H-%M-%S").tex"

这会生成以下输出

> make b
cp abc.tex "abc-2021-10-21-16-54-02.tex"

相关内容