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会被显示成 ">—" 而行尾多余的空白字符显示成 "-"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix