我正在关注教程https://makefiletutorial.com/#pattern-rules
make的递归使用
要递归调用 makefile,请使用特殊的
而不是$(MAKE)
因为它会为你传递 make 标志,而不会自己传递 受到他们的影响。make
new_contents = "hello:\n\ttouch inside_file" all: mkdir -p subdir printf $(new_contents) | sed -e 's/^ //' > subdir/makefile cd subdir && $(MAKE) clean: rm -rf subdir
看不懂台词
printf $(new_contents) | sed -e 's/^ //' > subdir/makefile
谁能告诉
sed -e 's/^ //'
在做什么?
我尝试编译并在子文件夹中生成了make文件。
你的问题似乎有点不明确。你有什么不明白的?
在以下行中:
printf $(new_contents) | sed -e 's/^ //' > subdir/makefile
printf $(new_contents)
将new_contents的内容写入stdout
.sed -e 's/^ //'
搜索以前导空格开头的第一行的内容并删除该空格。 s/^ //
是一个正则表达式。顺便说一句,在这种情况下,-e
选项是不必要的,但它更明确。> subdir/makefile
将结果写入子目录 subdir 中名为 makefile就是这样。