Answers:
这是语法的怪异/要求make
,与Mac OS X无关。不幸的是,如果要使用,您将无能为力make
。
编辑:GNU Make现在支持自定义配方前缀。看到这个答案。
您不是第一个不喜欢此方面的人make
。引用《Unix Haters手册》:
Dennis的Makefile的问题在于,当他添加注释行时,他无意间在第2行的开头的制表符前面插入了一个空格。制表符是Makefiles语法中非常重要的一部分。所有命令行(在我们的示例中以cc开头的行)必须以制表符开头。他进行更改后,第2行没有更改,因此出现了错误。
“所以呢?” 你问:“那是怎么了?”
本身没有任何问题。只是当您考虑其他编程工具如何在Unix中工作时,使用制表符作为语法的一部分就像是《绿色贝雷帽》中的那些橡皮筋陷阱之一:来自堪萨斯州的可怜孩子正站在约翰·韦恩的面前,而看不到跳闸线。毕竟,在堪萨斯州的玉米田里没有绊脚石。HAM!
.RECIPEPREFIX
)。以下答案之一也提到了这一点,应将其标记为“正确”而不是我的。 stackoverflow.com/a/21920142
自最初提出此问题以来,已经发布了GNU Make版本,该版本允许您使用除Tab前缀字符以外的其他内容。从邮件列表公告中:
新的特殊变量:.RECIPEPREFIX允许您将配方介绍字符从默认(TAB)重置为其他内容。该变量值的第一个字符是新配方介绍字符。如果变量设置为空字符串,则再次使用TAB。可以随意设置和重置;配方在首次解析时将使用活动值。要检测此功能,请检查$(。RECIPEPREFIX)的值。
此功能已添加到2010年7月发布的GNU Make 3.82中(该问题的原始要求日期之后六个月)。既然已经过去了三年,并且自那以后发生了变化,那么其他Make口味很可能也跟随了GNU Make。
如果您使用的是EditorConfig,则可以在.editorconfig
文件中添加以下几行,以强制您的IDE使用制表符进行缩进,而不是空格Makefile
:
[Makefile]
indent_style = tab
在ubuntu中:vi Makefile用tab(或您想要的任何其他东西)替换空间:
:%s/<space chars>/^I/g
例如,用制表符替换8个空格:
:%s/ /^I/g
请注意:^我用Tab键插入,而不是^和I字符:D
不便携。make的某些口味绝对需要使用制表符。选择制表符而不是空格的另一个原因是:-)