makefile:4: *** missing separator. Stop
这是我的makefile:
1 2 3 4 5 6 7 8 | all:ll ll:ll.c gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $< clean : m -fr ll |
当我尝试
1 | :makefile:4: *** missing separator. Stop. |
我该如何解决?
makefile与制表符有非常愚蠢的关系,每个规则的所有操作都由制表符标识......而No 4空格不制作制表符,只有制表符制作标签...
检查我使用命令
它显示了带有
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 :$ m -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 |
希望这可以帮助 !!
你应该总是在"tab"之后写命令而不是空格。
这适用于您的情况下的"gcc"行(第4行)。你需要在gcc之前插入标签。
同样用"rm -fr ll"替换 rm -fr ll。也可以在此命令之前插入标签
在VS Code上,只需单击右下角的"Space:4",然后在编辑Makefile时将其更改为tab。
这应该可以解决问题,并为makefile提供语法。
这是一个非常古老的问题,但我还想说一下使用
1 2 3 4 5 6 7 8 9 | %-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$ |
关键点是"HARD TAB"
1.检查是否使用了TAB而不是空格
2.检查.vimrc中的"set tabstop = X"
使用
1 2 3 4 5 6 7 8 9 10 11 | root = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space indent_size = 4 [Makefile] indent_style = tab |
如果您使用mcedit进行makefile编辑。你必须看到以下标记。
如果你们中的任何人使用的是Intellij的产品,那么解决方法就是:
这是因为tab被空格替换。
要禁用此功能,请转到
gedit->编辑 - >首选项 - >编辑
并删除检查
"用空格替换标签"