我收到了这个错误:
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
答案 0 :(得分:2)
这看起来像一个shell脚本。 Shell脚本不是makefile,反之亦然。你需要找一个关于make的好教程,或者阅读GNU make手册。
例如,您的变量值不应该有任何引用。
其次,make中的变量扩展要求变量被parens或大括号包围:$(FILES)
或${FILES}
。
第三,正如piokuc所说,这条线不是一个有效的制定规则。 make规则的格式为:
<target> : <dependencies...>
<commands...>
其中commands...
的缩进必须是TAB字符。此规则说“您可以通过运行target
”来构建dependencies...
,只要它比任何commands...
更长。 target
和dependencies
必须(通常)是文件,因此您绝对不希望在该列表中使用$(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开头的那一行)应该以制表符开头,而不是空格。