写在前面
我的编辑器默认都是通过空格代替Tab
缩进的, 这就导致在使用Makefile
时候会出现下面的错误:
makefile:8: *** missing separator. Stop.
或者:
makefile:7: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
一开始看Stack 好像这个问题无解了, 但是后来一个人的回答让我眼前一亮, 在gnu make
的4.2
版本之后就可以通过一条语句完成空格代替制表位了:
.RECIPEPREFIX := $(.RECIPEPREFIX)<space>
其中<space>
用实际的空格代替, 即可.
在我的MacOS上测试发现, 使用xcode
自带的make
并不能支持, 原因是其版本比较低, 还是3.81
的, 而使用brew
安装的gmake
就是4.4
版, 就可以顺利完成制表位到空格的替换了.
下面是一个测试:
.PHONY: all
.RECIPEPREFIX := $(.RECIPEPREFIX)
all: hello world
hello world: foo foo foo bar bar
@echo "== target: $@ =="
@echo $<
@echo $^
@echo $+
foo:
@echo "Hello foo"
bar:
@echo "Hello Bar"
使用gmake -f makefile-name
, 输出如下:
Hello foo
Hello Bar
== target: hello ==
foo
foo bar
foo foo foo bar bar
== target: world ==
foo
foo bar
foo foo foo bar bar