LinuxSir.cn,穿越时空的Linuxsir!

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

有个疑问,请兄弟们帮忙

[复制链接]
发表于 2005-2-22 17:21:00 | 显示全部楼层 |阅读模式
下面是一个makefile文件,想请问一下在obj那一块的语句 for d in  $$DIR/*.f; \ 为什么在DIR前有两个“$”号?而且这段每句结束都有“;”号?



SILENT:
SHELL = /bin/sh

NAME=BDF
PNAME=PBDF

DFT=$(NAME)
PDFT=$(PNAME)

F77     = f90
FFLAGS  = -O -i8 -tune host -arch host -align dcommons -assume buffered_io -warn unused -warn nouncalled

PF77    = mpif90
PFFLAGS = -DMPI $(FFLAGS)

CC      = cc
CFLAGS  = -O -DI8

LOGFILE = bdf.log

all:;
        rm -f bdf.log
        make bdfsrc
        make bdfpsrc

bdfsrc:;
        make DIR=.         obj    SHELL=/bin/sh  FF=$(F77)
        make DIR=ioutil    obj    SHELL=/bin/sh  FF=$(F77)
        make DIR=atgp      obj    SHELL=/bin/sh  FF=$(F77)
        make DIR=dgroup    obj    SHELL=/bin/sh  FF=$(F77)
        make DIR=util      obj    SHELL=/bin/sh  FF=$(F77)
        make DIR=clib      cobj   SHELL=/bin/sh  
        make $(DFT)

bdfpsrc:;
        make DIR=.         pobj   SHELL=/bin/sh  FF=$(PF77)
        make DIR=ioutil    pobj   SHELL=/bin/sh  FF=$(PF77)
        make DIR=atgp      pobj   SHELL=/bin/sh  FF=$(PF77)
        make DIR=dgroup    pobj   SHELL=/bin/sh  FF=$(PF77)
        make DIR=util      pobj   SHELL=/bin/sh  FF=$(PF77)
        make DIR=plib      pobj   SHELL=/bin/sh  FF=$(PF77)
        make DIR=clib      cobj   SHELL=/bin/sh  
        make $(PDFT)

$(DFT): objects/*.o cobjects/*.o
        rm -f $(DFT)
        $(F77) objects/*.o cobjects/*.o -o $(DFT) 2>>$(LOGFILE)
        echo Compiling --$(DFT)-- done !

$(PDFT): pobjects/*.o cobjects/*.o
        rm -f $(PDFT)
        $(PF77) pobjects/*.o cobjects/*.o -o $(PDFT) 2>>$(LOGFILE)
        echo Compiling --$(PDFT)-- done !

obj:;
        ext=".f";\
        for d in  $$DIR/*.f; \
        do \
          filename=`basename $$d $$ext`; \
          make FILE=$$filename DIR=$$DIR objects/$$filename.o; \
        done

pobj:;
        ext=".f";\
        for d in  $$DIR/*.f; \
        do \
          filename=`basename $$d $$ext`; \
          make FILE=$$filename DIR=$$DIR pobjects/$$filename.o;\
        done

cobj:;
        ext=".c";\
        for d in  $$DIR/*.c; \
        do \
          filename=`basename $$d $$ext`; \
          make FILE=$$filename DIR=$$DIR cobjects/$$filename.o; \
        done

objects/$(FILE).o: $(DIR)/$(FILE).f ;
        cp -f $(DIR)/$(FILE).f $(DIR)/$(FILE).F ;\
        $(FF) $(FFLAGS) -c $(DIR)/$(FILE).F 2>>$(LOGFILE);\
        rm -f $(DIR)/$(FILE).F ;\
        mv $(FILE).o objects;\
        echo update $(DIR)/$(FILE)

pobjects/$(FILE).o: $(DIR)/$(FILE).f ;
        cp -f $(DIR)/$(FILE).f $(DIR)/$(FILE).F ;\
        $(FF) $(PFFLAGS) -c $(DIR)/$(FILE).F 2>>$(LOGFILE);\
        rm -f $(DIR)/$(FILE).F ;\
        mv $(FILE).o pobjects;\
        echo update $(DIR)/$(FILE)

cobjects/$(FILE).o: $(DIR)/$(FILE).c ;
        $(CC) $(CFLAGS) -c $(DIR)/$(FILE).c 2>>$(LOGFILE);\
        mv $(FILE).o cobjects;\
        echo update $(DIR)/$(FILE)

clean:
        rm -f objects/*.o
        echo delete objects/*.o
        rm -f pobjects/*.o
        echo delete pobjects/*.o
        rm -f cobjects/*.o
        echo delete cobjects/*.o
        rm -f $(LOGFILE)
        echo delete $(LOGFILE)
发表于 2005-2-22 17:35:23 | 显示全部楼层
$$指不是Makefile的参数而是shell的参数。
而;\那些实际上是指
ext=".f"; for d in $$DIR/*.f; do filename=`basename $$d $$ext`; make FILE=$$filename DIR=$$DIRobjects/$$filename.o; done
把几条指令写成一行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-22 20:57:50 | 显示全部楼层
谢过这位兄弟
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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