Make 不支持反引号。shell 支持反引号。当你写这个:
variable = `find /username/mcarlis -maxdepth 2 -name 'Top' -type d`
您已经分配了文字字符串:
`find /username/mcarlis -maxdepth 2 -name 'Top' -type d`
到变量variable
。然后在下一行中,您尝试替换 value /Top
,但该字符串没有 value /Top
,因此 subst 无效。
它看起来正确的原因是当您编写这样的规则时:
all:
echo ${variable}
make 运行 shell 命令:
echo `find /username/mcarlis -maxdepth 2 -name 'Top' -type d`
外壳将为您处理反引号。如果您查看进行打印的输出,您会看到上面的内容,很明显 的值variable
不是路径名,而是反引号命令。
假设您使用的是 GNU make,那么做您想做的事情的方法是使用以下$(shell ...)
函数:
variable := $(shell find /username/mcarlis -maxdepth 2 -name 'Top' -type d)
编辑添加:
似乎还是有些混乱。也许这会有所帮助:修改makefile以使用$(info ...)
函数打印变量的值:
variable = `find /username/mcarlis -maxdepth 2 -name 'Top' -type d`
$(info variable is: $(variable))
你会看到它没有设置为/username/mcarlis/source/Top
.
您还可以运行make -p
打印 make 的内部数据库,它将向您显示所有变量的值......您会看到这个值也不/username/mcarlis/source/Top
是那样的。