这是我的makefile:
all:ll
ll:ll.c
gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<
clean :
\rm -fr ll
当我尝试make clean
或make make
时,我收到此错误:
:makefile:4: *** missing separator. Stop.
我该如何解决?
答案 0 :(得分:708)
makefile与制表符有非常愚蠢的关系,每个规则的所有操作都由制表符标识......而No 4空格不制作制表符,只有制表符制作标签...
检查我是否使用命令cat -e -t -v makefile_name
它显示带有^I
的标签的存在,以及带有$
的行结尾对于确保依赖关系正确结束以及制表符标记规则的操作至关重要,以便它们可以轻松识别效用.....
示例:
Kaizen ~/so_test $ cat -e -t -v mk.t
all:ll$ ## here the $ is end of line ...
$
ll:ll.c $
^Igcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<$
## the ^I above means a tab was there before the action part, so this line is ok .
$
clean :$
\rm -fr ll$
## see here there is no ^I which means , tab is not present ....
## in this case you need to open the file again and edit/ensure a tab
## starts the action part
希望这会有所帮助!!
答案 1 :(得分:25)
您应该始终在“标签”之后写入命令,而不是空格。
这适用于您的情况下的“gcc”行(第4行)。你需要在gcc之前插入标签。
也用“rm -fr ll”替换\ rm -fr ll。在此命令之前插入标签
答案 2 :(得分:20)
在VS Code上,只需点击&#34; Space:4&#34;在编辑Makefile时,在右下角并将其更改为选项卡。
答案 3 :(得分:5)
这是一个非常古老的问题,但我还是想说一下使用vi/vim
编辑器来查看选项卡的另一个选项。如果您安装了vi/vim
,请打开Makefile
(例如vim Makefile
)并输入:set list
。这将显示插入的标签数量,如下所示
%-linux: force$
^I@if [ "$(GCC_VERSION)" = "2.96" ] ; then \$
^I^Iecho ===== Generating build tree for legacy $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@ legacy; \$
^Ielse \$
^I^Iecho ===== Generating build tree for $@ architecture =====; \$
^I^I$(CONFIGURE) $(CWD) $@; \$
^Ifi$
^Icd build-$@;make$
答案 4 :(得分:5)
PyCharm
的解决方案是安装一个Makefile support
插件:
Preferences
(cmd + ,
)Plugins
-> Marketplace
Makefile support
,安装并重新启动IDE。这应该可以解决问题,并提供Makefile的语法。
答案 5 :(得分:4)
关键点是&#34; HARD TAB&#34; 1.检查是否使用了TAB而不是空格 2.检查.vimrc中的&#34;设置tabstop = X&#34;
答案 6 :(得分:4)
makefile 的语法可能很古怪
如果您希望将一行代码解释为 make
代码,它必须仅使用 空格 缩进。
如果您希望将一行代码解释为 bash
代码,它必须仅使用 制表符
sometask:
ifeq($FOO,bar) // this is make code. only spaces
echo "foobar" // this is bash code. only tabs
endif // again, this is make code. only spaces
从技术上讲,它是决定解释器的主要缩进。
答案 7 :(得分:2)
这是因为tab被空格替换。 要禁用此功能,请转到
<强> gedit-&GT;编辑 - &GT;首选项&GT;编辑强>
并删除检查
“用空格替换标签”
答案 8 :(得分:1)
如果您中的任何人正在使用Intellij的产品,则解决方案如下:
Other File Types
。Use tab character
的复选框,请注意,Tab size
和Indent
的值必须为4。答案 9 :(得分:1)
答案 10 :(得分:1)
为了简单起见,使用 -A 或 --show-all 来显示所有内容。
答案 11 :(得分:0)
使用.editorconfig
自动修复标签:
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
答案 12 :(得分:0)
如果要在Eclipse中编辑Makefile:
Windows-> Preferences->General->Editor->Text Editors->Show Whitespace Characters -> Apply
或使用下面显示的快捷方式。
选项卡将用灰色“ >>”表示,空格将用灰色“”表示。如下图所示。
答案 13 :(得分:-4)
您的Linux版本不支持这种功能,请使用其他合适的版本,例如Kali Linux或 Red Hat 。