我想在生成文件规则期间创建文件,
在规则的最后,我想通过使用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
答案 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)"