这是我的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.
我该如何解决?
这是我的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.
我该如何解决?
Answers:
makefile与选项卡具有非常愚蠢的关系,每个规则的所有操作均由选项卡标识。不,四个空格不能构成标签,只有一个标签可以构成标签。
检查我使用命令 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
makefile
从教程中粘贴了几行,但没有用。只有删除空格并放入后才Tab
起作用!
-v
cat
命令选项是多余的,因为-e
手段-vE
和-t
手段-vT
。
在VS Code上,只需单击右下角的“空格:4”,然后在编辑Makefile时将其更改为选项卡。
您应该始终在a后面Tab而不是空白后面写命令。
这适用gcc
于您的情况下的第4行。您需要在之前插入制表符gcc
。
还要替换\rm -fr ll
为rm -fr ll
。在此命令之前也插入标签。
它是一个相当老的问题,但是我仍然想使用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$
使用.editorconfig
,自动将修复标签:
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
如果您中的任何人正在使用Intellij的产品,那么以下解决方案是:
Other File Types
。Use tab character
,小心,Tab size
和Indent
值必须是4。这是因为制表符被空格代替。要禁用此功能,请转到
gedit-> edit-> preferences-> editor
并删除检查
“ 用空格替换选项卡 ”