LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 645|回复: 6

makefile 的问题

[复制链接]
发表于 2004-8-3 15:36:08 | 显示全部楼层 |阅读模式
照书上写了一个makefile3如下:
all:myapp

CC=gcc

INCLUDE=.

INSTDIR=/usr/local/bin

#option for debug version
CFLAGS=-g -Wall -ansi


myapp:main.o 2.o 3.o
        $(CC) -o myapp main.o 2.o 3.o
main.o: main.c a.h
        $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
2.o:2.c a.h b.h
        $(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o:3.c b.h c.h
        $(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c

clean:
        -rm *.o

install:myapp
        @if[ -d $(INSTDIR) ]; \
        then \
                cp myapp $(INSTDIR); \
                chmod a+x $(INSTDIR)/myapp; \
                chmod og -w  $(INSTDIR)/myapp; \
                echo "Install in $(INSTDIR)"; \
        else \
                echo"Sorry, $(INSTDIR) does not exit"; \
        fi

make -f makefile3 成功,但是make -f makefile3 install 出现如下错误:
[tan@Cims7 make1]$ make -f makefile3 install
/bin/sh: -c: line 1: syntax error near unexpected token `then'
/bin/sh: -c: line 1: `if[ -d /usr/local/bin ];  then  cp myapp /usr/local/bin;
chmod a+x /usr/local/bin/myapp;  chmod og -w  /usr/local/bin/myapp;  echo "Install in /usr/local/bin";  else  echo"Sorry, /usr/local/bin does not exit";  fi'
make: *** [install] Error 2
不知是何原因,请指点。顺便问一下@if[ -d $(INSTDIR) ]; \是何意思?-d有何作用?
发表于 2004-8-3 16:42:22 | 显示全部楼层
if test -d $(INSTDIR);then

`test' to examine whether this file is exist.
 楼主| 发表于 2004-8-5 18:14:32 | 显示全部楼层

多谢了,救人救到底呀

改成
install:myapp
#        @if[ -d $(INSTDIR) ]; \
        if test -d $(INSTDIR);then
        cp myapp $(INSTDIR);
                chmod a+x $(INSTDIR)/myapp;
                chmod og-w $(INSTDIR)/myapp;
                echo "Install in $(INSTDIR)";
        else;
        echo "Sorry, $(INSTDIR) does not exit";
        fi

[root@Cims7 make1]# make -f makefile3 install
cp myapp /usr/local/bin;
chmod a+x /usr/local/bin/myapp;
chmod og-w /usr/local/bin/myapp;
echo "Install in /usr/local/bin";
Install in /usr/local/bin
else;
/bin/sh: -c: line 1: syntax error near unexpected token `else'
/bin/sh: -c: line 1: `else; '
make: *** [install] Error 2
不知为何?
还有linux下都是如何拷贝粘贴的,我在emacs下alt-w只能在emacs 下粘贴,却贴补到论坛中来,我每次都要用gediti重新打开一下,不知各位有何高招?
发表于 2004-8-5 18:25:24 | 显示全部楼层
else后面多个分号

复制粘贴,选中要复制的内容,然后在要粘贴的地方点鼠标中键
 楼主| 发表于 2004-8-5 21:26:38 | 显示全部楼层

景仰……

1.去掉分号后:
install:myapp
#        @if[ -d $(INSTDIR) ]; \
        if test -d $(INSTDIR);then
        cp myapp $(INSTDIR);
                chmod a+x $(INSTDIR)/myapp;
                chmod og-w $(INSTDIR)/myapp;
                echo "Install in $(INSTDIR)";
        else
        echo "Sorry, $(INSTDIR) does not exit";
        fi
出现如下错误:
[root@Cims7 make1]# make -f makefile3 install
cp myapp /usr/local/bin;
chmod a+x /usr/local/bin/myapp;
chmod og-w /usr/local/bin/myapp;
echo "Install in /usr/local/bin";
Install in /usr/local/bin
else
make: else: Command not found
make: *** [install] Error 127
2.末尾加上反斜杠符号:
install:myapp
#        @if[ -d $(INSTDIR) ]; \
        if test -d $(INSTDIR);then
        cp myapp $(INSTDIR);
                chmod a+x $(INSTDIR)/myapp;
                chmod og-w $(INSTDIR)/myapp;
                echo "Install in $(INSTDIR)";
        else \
        echo "Sorry, $(INSTDIR) does not exit";
        fi

出现如下错误:
[root@Cims7 make1]# make -f makefile3 install
cp myapp /usr/local/bin;
chmod a+x /usr/local/bin/myapp;
chmod og-w /usr/local/bin/myapp;
echo "Install in /usr/local/bin";
Install in /usr/local/bin
else \
echo "Sorry, /usr/local/bin does not exit";
/bin/sh: -c: line 1: syntax error near unexpected token `else'
/bin/sh: -c: line 1: `else  echo "Sorry, /usr/local/bin does not exit";'
make: *** [install] Error 2
为什么呢?不是说每行不结束就该加上反斜杠符,为何加了反而错误呢?
(感谢楼上的教给我中间粘贴的技巧,是linux通用的吗?我看了这么多书,咋从来没有看到呢?看来这山更有那山高呀,天外有天,楼外有楼,仙外有仙呀)
发表于 2004-8-6 08:07:08 | 显示全部楼层
# @if[ -d $(INSTDIR) ]; \
把这一句后面的 \ 去掉, 或把这一句删掉
然后后面的每一行除了 fi 以外都加 \
 楼主| 发表于 2004-8-6 10:34:50 | 显示全部楼层

ok

成功了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表