Makefile中空格与tab

空格与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.

排除方法

使用vim打开文件

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

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

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

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

1701004495345.png

posted @   klaycsu  阅读(299)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示