Makefile,何时评估$(shell cat文件)



生成文件

a: 
echo "123" > afile
cat afile
# expect output 123, but it's empty
echo $(shell cat afile)  

为什么echo什么都不输出?

在make中,在调用配方中的第一个命令之前,将展开整个配方(配方中的所有命令(。

由于$(shell ...)是一个make函数,而不是shell函数,make将在开始运行配方中的任何命令之前对其进行扩展。

您可以将其更改为$$(cat afile)并使其成为shell操作,并且make不会运行cat

谢谢大家$(shell…(在执行配方之前展开。说得通。查看以下代码

a: 
ln -s hello.txt qq
cat qq
echo $(shell cat qq)
a1: a
cat qq
echo $(shell cat qq)

制作a1。

为什么a1可以正确地回显字符串?hello.txt包含hello。

在谷歌之后,找到答案。就像MadScientist所说的避免$(shell…(。

a: 
echo "123" > afile
cat afile
echo `cat afile`
a: 
echo "123" > afile
cat afile
echo $$(cat afile)

最新更新