这是我的生成文件:
all:ll
ll:ll.c
gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<
clean :
\rm -fr ll
当我尝试make clean
ormake make
时,我收到此错误:
:makefile:4: *** missing separator. Stop.
我该如何解决?
make 与标签的关系非常愚蠢。每个规则的所有操作都由选项卡标识。而且,不,四个空格不构成一个制表符。只有一个制表符才有制表符。
要检查,我使用命令cat -e -t -v makefile_name
。
它显示了带有 的制表符和带有 的^I
行尾$
。两者对于确保依赖关系正确结束和选项卡标记规则的操作至关重要,以便 make 实用程序可以轻松识别它们。
例子:
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
在 VS Code 上,只需单击右下角的“空格:4”,然后在编辑 Makefile 时将其更改为选项卡。
Tab您应该始终在 a而不是空格之后编写命令。
这适用gcc
于您的情况下的行(第 4 行)。您需要在gcc
.
也替换\rm -fr ll
为rm -fr ll
. 在此命令之前也插入制表符。
解决方案PyCharm
是安装Makefile support
插件:
Preferences
( cmd + ,
)Plugins
->Marketplace
Makefile support
、安装并重新启动 IDE。这应该可以解决问题并为生成文件提供语法。
用于自动.editorconfig
修复标签:
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
如果您希望将一行代码解释为make
只能用空格缩进的代码, makefile 语法可能会很奇怪。
如果您希望将一行代码解释为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
从技术上讲,它是决定解释器的主要缩进。
这是一个很老的问题,但我仍然想再说一个使用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$
关键点是“HARD TAB” 1. 检查您是否使用了 TAB 而不是空格 2. 检查 .vimrc 是否有“set tabstop=X”
如果你们中的任何人使用 Intellij 的产品,解决方案如下:
Other File Types
.Use tab character
并小心,Tab size
值Indent
必须为 4。您以“空格,空格”而不是“制表符”开始第 4 行 - 仅此而已。
这是因为制表符被空格替换。要禁用此功能,请转到
gedit->编辑->首选项->编辑器
并删除检查
“用空格替换制表符”
为简单起见,使用 -A 或 --show-all 显示所有内容。
如果有人遇到这个问题
*** missing separator. Stop.
在构建过程中,他们应该仔细检查他们的路径,它不应该包含像“#”这样的特殊字符
如果您在这里搜索如何使您添加的选项卡和新行可以被 vim 理解,您必须首先在 vim 中启用选项卡。
在添加选项卡之前,您可以使用:set noet
ie(从空格切换到 TAB)来执行此操作。
使用此命令,您的选项卡将看起来像其他选项卡(即 ^I),并且 *** missing separator. Stop.
来自 make 的错误将消失 :)
进行更改后,您可以使用:set et