Linux 无法调试生成文件。Makefile:9:**缺少分隔符。停止

Linux 无法调试生成文件。Makefile:9:**缺少分隔符。停止,linux,vim,makefile,Linux,Vim,Makefile,我已经编写了以下Makefile: CC='/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot' IDIR =../../../include CFLAGS=-I$(IDIR) LDIR =../../../../../../../../.debug/lib.out/public/ LIBS= -lmyli

我已经编写了以下Makefile:

CC='/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot'
IDIR =../../../include
CFLAGS=-I$(IDIR)

LDIR =../../../../../../../../.debug/lib.out/public/
LIBS= -lmylib1 -lmylib2 -lmylib3

myexec: my_code.c
    $(CC) $(CFLAGS) -o myexec my_code.c
它抛出错误:

Makefile:9: *** missing separator. Stop
我看了一个相关的问题。它说标签可能有问题。我仔细检查了密码。我使用的是选项卡,而不是空格。但是当我跑的时候

cat -e -t -v  Makefile
我得到以下信息,这意味着
$CC
之前没有选项卡

CC='/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot'$
IDIR =../../../include$
CFLAGS=-I$(IDIR)$
$
LDIR =../../../../../../../../.debug/lib.out/public/$
LIBS= -lmylib1 -lmylib2 -lmylib3$
$
myexec: my_code.c$
    $(CC) $(CFLAGS) -o myexec my_code.c$
我还检查了我的.vimrc文件。我已
设置tabstop=4
。我试着去掉这个,但它反而使情况变得更糟。它开始给我错误:
Makefile:9:**缺少分隔符(您是指制表符而不是8个空格?)。停止。
这就是它的样子:

syntax on
colorscheme desert
set nocompatible
set number
set backspace=indent,eol,start
set autoindent
set ruler
set spell
set title
set et
set mouse=v
set history=100
set tabstop=4

在您的
vim
初始化中有一些东西阻止了对Makefile的正确编辑。它似乎是
et
,这是
expandtab
设置的缩写,它使每个制表符扩展到适当数量的空格字符。(感谢Craig Estey对此的确认。)

但是,您可以通过使用
-u NONE
告诉
vim
不要使用init文件:

vim -u NONE Makefile
这样,您就可以编辑所需的制表符

或者,您可以将其添加到
.vimrc
的底部:

:autocmd FileType make set noet

它将在编辑Makefile时禁用
expandtab
行为。

et选项是罪魁祸首。它是expandtab的缩写,这正是您不想要的。从
.vimrc
中删除。然后,在列表中重新输入
$(CC)
行makefile@CraigEstey:这对询问者来说是有意义的,因为他们愿意更改vim配置。对于许多用户来说,vim配置在大多数情况下都是理想的默认行为,但是他们需要为偶尔出现的奇怪文件提供一个例外。在上添加行
文件类型插件缩进,使Vim加载特定于文件类型的设置,从而用合理的设置覆盖您自己的常规设置。@jxh在有
.vimrc
之前,有环境变量
EXINIT
。这就是我所用/喜欢的。它解决了奇怪文件的问题,因为它可以按(例如)
xterm
进行设置。例如,对于我自己的代码,我更喜欢4的tabstop(我在
.login
.bash\u profile
EXINIT
中设置)。但是,在我对“tab8”文件进行大量编辑的情况下,我会打开一个新的
xterm
,我有一个shell别名/函数,可以修改
EXINIT
,并仅为该窗口设置
ts=8
(例如
t8