如何防止make太早运行$(shell命令)

时间:2019-05-15 08:35:20

标签: makefile

我想在生成文件规则期间创建文件, 在规则的最后,我想通过使用make的$(shell xxx)函数对文件运行一个shell命令。

这是显示问题的简化示例makefile:

test:
        @echo 123 >> file
        @cat file
        @echo "File: $(shell cat file) "

我希望makefile的最后一行会打印:File: 123

相反,make似乎在makefile的其他行之前运行$(shell cat file)

> rm file
> make test
cat: file: No such file or directory
123
File:  

是否有一些简单的方法可以防止不良行为并获得以下结果?

> rm file
> make test
123
File: 123 

3 个答案:

答案 0 :(得分:1)

这里不需要使用make的{​​{1}}语法。只需使用反引号`...`序列即可直接调用$(shell ... ...

cat

或者,如果您的test: @echo 123 >> file @cat file @echo "File: "`cat file` 版本支持取消尾随换行符的选项...

echo

答案 1 :(得分:1)

  

有一些简单的方法可以防止不良行为

这是预期行为并已记录在案。如果那不是您想要的,则完全不要使用$(shell)

test:
    @echo 123 >> file
    @cat file
    @printf "File: "
    @cat file

答案 2 :(得分:1)

在Makefile中转出您的资金,并使用Shell自己的子流程工具$(command)

test:
    echo "zzz" > z
    echo "$$(cat z)"