前言
- 为了对齐方便,在C、C++等代码编写时,一般会设置【IDE】,把【制表符】统一替换为【空格】。如把一个TAB 制表符替换为 4个空格,这在源代码中是没有问题的
- Makefile 与 Linux shell 脚本中,如果把 TAB 制表符替换为空格,就无法正确的执行,设置报错
示例
- Makefile 简单的验证时,我直接在shell 中运行:vim,vim 中 制表符TAB就是TAB,空格就是空格,所以执行没有问题,也就是 make,发现按自己预想的方式执行
- 复杂的Makefile,我使用VS Code,并且增加了几个构建目标,这里我发现TAB键看起来不舒服,就使用空格对齐,结果make时竟然无法执行了,排查发现就是大部分的shell命令,【制表符不能使用空格替换】,并且 shell变量的赋值时,尽量不能有【多余的空格】
- 显然,空格替换TAB制表符、多余的空格,对Makefile、Shell脚本,带来巨大的风险,调试起来非常的不方便,尤其是IDE没有显示【空白符】时,看着【缩进】一样,但是有的能运行,有的不能正确运行,有的直接报错了
Makefile 中的制表符
- Makefile 有构建目标:这个目标后面一般是 TAB键(制表符),强行替换为4个空格,看起来很舒服,但是make时,发现无法运行:
- 修复方法:把Makefile 中应该为制表符(TAB键)的地方,改为TAB键,如果代码编辑器已经设置默认TAB使用空格替换,可以使用 shell 中的 vim来执行替换
小结
- 注意在Makefile 编写或编辑时,注意:空格与制表符问题,不该使用空格替换时,不能替换
- 另外shell 中空格尽量不要多加,如shell 变量的赋值时,有空格会造成异常
- 脚本编写时,需要时刻注意细节