Makefile中空格与tab

发布时间 2023-11-26 21:15:46作者: klaycsu

Makefile中空格与tab

makefile实际上是在一个文件中用两种完全不同的“语言”编写的。

  • recipe(运行编译器,echo等的命令)是用shell脚本语法编写的。

  • 不在recipe中的其余makefile是用makefile语法编写的。

为了使make能够区分recipe和不是recipe的东西,它使用了TAB字符。因此,

以TAB开头的行被假定为recipe的一部分,因此它们是shell脚本并传递给shell进行解析。

以空格开头的行不能成为recipe的一部分,它们必须是makefile语法,用空格。

ifneq是makefile语法:它不能成为recipe的一部分,并且以空格开头。

结论:

1、在写makefile语法,非recipe的时候,缩进应该使用空格。

2、在写shell语法,recipe时,缩进使用TAB。因为实际上我们写的是希望shell执行的语句,所以使用的是shell syntax。而make识别recipe的方式就是。

如果makefile中两者混用,会导致报错:
*** recipe commences before first target. Stop.

排除方法

:set list //显示不可见字符
:set nolist //隐藏不可见字符

现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字符在哪里。

:set listchars=tab:>-,trail:-

TAB会被显示成 ">—" 而行尾多余的空白字符显示成 "-"

Alt text