2013-05-07 50 views
1

我得到这个错误:虽然我在第24行***缺少分隔符。停止。制作文件

Line24与标签改变了所有的空格字符

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

:arm_v5t_le-GCC $ FILES $包括$ 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

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

例如,您不应该在变量值中引用任何引号。

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

第三,正如piokuc所说,该行不是有效的制定规则。的美容规则有以下形式:

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

其中commands...的缩进必须是制表符。这个规则说:“你可以通过运行commands...来创建target,只要它比dependencies...中的任何一个更老。” targetdependencies必须(通常)是文件,所以你绝对不想在该列表中使用$(INCLUDES)$(LIBS),因为这些是编译器标志。

你可能想是这样的,尽管它可以改进:

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

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

1

我认为最后一行应与东西等来代替:

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

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