|
下面是一个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) |
|