***缺少分隔符。停止。制作文件

时间:2013-05-07 13:17:25

标签: makefile

我收到了这个错误:

   make:24: *** missing separator.  Stop.

虽然我用第24行的标签更改了所有空格字符。

Line24:arm_v5t_le-gcc $ FILES $ INCLUDES $ LIBS -o $ TARGET

以下是代码:

#DM_serial2_make

export PATH="$PATH:/opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin:/opt/mv_pro_5.0/montavista/pro/bin:/opt/mv_pro_5.0/montavista/common/bin" 
TARGET="/home/cilem/Desktop/06.05.2012/DM_serial2"

INCLUDES="  -I /home/cilem/Desktop/06.05.2012/libxml2 \
        -I /home/cilem/Desktop/06.05.2012/gstreamer-0.10  \
                -I /home/cilem/Desktop/06.05.2012/gstreamer-0.10/gst/interfaces \
                -I /home/cilem/Desktop/06.05.2012/glib-2.0 \
                -I /home/cilem/Desktop/06.05.2012/glib-2.0/include"

LIBS="  -L /home/cilem/Desktop/06.05.2012/lib/ -l:libgstreamer-0.10.so.0 \
    -L /home/cilem/Desktop/06.05.2012/lib/ -l:libgstinterfaces-0.10.so.0 \
    -L /home/cilem/Desktop/06.05.2012/lib/ -l:libgobject-2.0.so.0 \
    -L /home/cilem/Desktop/06.05.2012/lib/ -l:libgmodule-2.0.so.0 \
    -L /home/cilem/Desktop/06.05.2012/lib/ -l:libxml2.so.2 \
    -L /home/cilem/Desktop/06.05.2012/lib/ -l:libgthread-2.0.so.0 \
    -L /home/cilem/Desktop/06.05.2012/lib/ -l:libglib-2.0.so.0"


FILES="DM_serial2.c"

arm_v5t_le-gcc $FILES $INCLUDES $LIBS -o $TARGET

2 个答案:

答案 0 :(得分:2)

这看起来像一个shell脚本。 Shell脚本不是makefile,反之亦然。你需要找一个关于make的好教程,或者阅读GNU make手册。

例如,您的变量值不应该有任何引用。

其次,make中的变量扩展要求变量被parens或大括号包围:$(FILES)${FILES}

第三,正如piokuc所说,这条线不是一个有效的制定规则。 make规则的格式为:

<target> : <dependencies...>
        <commands...>

其中commands...的缩进必须是TAB字符。此规则说“您可以通过运行target”来构建dependencies...,只要它比任何commands...更长。 targetdependencies必须(通常)是文件,因此您绝对不希望在该列表中使用$(INCLUDES)$(LIBS),因为它们是编译器标志。

你可能想要这样的东西,虽然它可以改进:

$(TARGET): $(FILES)
        arm_v5t_le-gcc $(FILES) $(INCLUDES) $(LIBS) -o $(TARGET)

你在这里有其他奇怪的事情。您不需要使用-L标志一遍又一遍地提供相同的目录。一次就够了。我也不熟悉-l:libfoo.a构造;通常它只是-lfoo

答案 1 :(得分:1)

我认为最后一行应该替换为:

$TARGET: $FILES $INCLUDES $LIBS
    arm_v5t_le-gcc $FILES $INCLUDES $LIBS -o $TARGET

上面一行(以arm_v5t_le-gcc开头的那一行)应该以制表符开头,而不是空格。