以下工作在 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"