2014-12-06 100 views
-1

我似乎無法調試,請有人可以幫忙嗎? * .f90文件確實存在,並且該目錄是正確的。我不確定它可能是什麼,gfortran編譯器在makefile外工作正常。沒有規則,使目標,但文件存在,編譯

make[1]: Entering directory '/media/f/fv/ED-2.1/ED/build/bin' 
    make[1]: *** No rule to make target 'media/f/fv/ED-2.1/ED/src/utils/allometry.f90', needed by 'allometry.o'. Stop. 
    make[1]: Leaving directory '/media/f/fv/ED-2.1/ED/build/bin' 
    Makefile:24: recipe for target 'all' failed 


This is the makefile 

#----- Define path and compilation --------------------------------------------------------# 
include paths.mk 
include include.mk.$(OPT) 
#----- Compiler commands. -----------------------------------------------------------------# 
INCLUDES = $(PAR_INCS) -I$(ED_INCS) $(HDF5_INCS) $(MPI_INCS) 
F90_COMMAND = $(F_COMP) -c $(F_OPTS) $(INCLUDES) $(PAR_DEFS) 
FPP_COMMAND = $(F_COMP) -c -DUSE_INTERF=$(USE_INTERF) -DUSENC=$(USENC) -D$(CMACH)   \ 
       -DUSE_HDF5=$(USE_HDF5) -DUSE_COLLECTIVE_MPIO=$(USE_COLLECTIVE_MPIO)   \ 
       -DUSE_MPIWTIME=$(USE_MPIWTIME) $(F_OPTS) $(INCLUDES) $(PAR_DEFS) 
CXX_COMMAND = $(C_COMP) -c $(C_OPTS) -D$(CMACH) $(HDF5_INCS) $(INCLUDES) $(PAR_DEFS) 
#----- Define archive and executable names. -----------------------------------------------# 
EXE=$(BASE)/ed_$(ED_VERSION)-$(OPT) 
LIBMODEL=$(BASE)/ed_$(ED_VERSION)-$(OPT).a 

include objects.mk 
#----- Define targets. --------------------------------------------------------------------# 

all: 
    make gendep 
    #$(info $$EXE is [${EXE}]) 
    make $(EXE) 
    make $(EXE) 
    make $(EXE) 
    make $(EXE) 
    make $(EXE) 

gendep: 
    @echo "" 
    ./generate_deps.sh $(ED_ROOT) 
    @echo === Finished dependencies === 

$(EXE): $(LIBMODEL) $(MAINOBJ) 
    @echo "" 
    $(LOADER) -o $(EXE) edmain.o $(LOADER_OPTS) $(LIBMODEL) $(HDF5_LIBS) $(PAR_LIBS) \ 
    $(NC_LIBS) $(LIBS) $(LOADER_OPTS) 
    @echo "" 
    @echo Finished building === $(EXE) 
    @echo "" 

$(MAINOBJ): $(MAIN) 
    @echo "" 
    cp -f $< $(<F:.f90=.f90) 
    $(F90_COMMAND) $(<F:.f90=.f90) 
    rm -f $(<F:.f90=.f90) 

$(LIBMODEL): $(OBJ_MODEL) 
    $(ARCHIVE) $(LIBMODEL) $(OBJ_MODEL) 

FORCE: 

install: 
    @echo "" 
    ln -fs `pwd`/$(EXE) ../run/$(BASE) 
    ln -fs `pwd`/$(EXE) ../test/$(BASE) 
    @echo "" 

clean: 
    @echo "" 
    rm -f $(LIBMODEL) $(EXE) *.o *.mod *.F90 *.f90 *.stb *.d dependency.mk 
    rm -f ../$(EXE) ../$(LIBMODEL) 
    touch dependency.mk 
    @echo "" 

#----- Define rules -----------------------------------------------------------------------# 
include rules.mk 
+0

對於初學者,只需使'gendep'和'$(EXE)'依賴於'all'來替換'make'調用。 – reinierpost 2014-12-06 23:25:59

回答

1

這個makefile是一個混亂。爲什麼在all配方中連續5次列出相同的命令make $(EXE)?爲什麼你使用$(<F:.f90=.f90),它只是用相同的字符串.f90替換字符串.f90,本質上是沒有操作?

此外,我們沒有足夠的信息來回答您的問題:您尚未提供變量MAINOBJOBJ_MODEL或更重要的是MAIN的定義。至少有一個是錯誤的。除非你誤轉錄的錯誤信息(請務必剪切和粘貼實際的錯誤,不要試圖手動鍵入他們!),那麼這樣的:

make[1]: *** No rule to make target 'media/f/fv/ED-2.1/ED/src/utils/allometry.f90', needed by 'allometry.o'. Stop. 

告訴你的問題是什麼;請注意,在此路徑名的開始處,media之前沒有斜槓(/)。所以這不是絕對路徑,而是相對路徑。這意味着make實際上試圖找到名稱爲/media/f/fv/ED-2.1/ED/build/bin/media/f/fv/ED-2.1/ED/src/utils/allometry.f90的文件,這顯然不存在。

我們不能告訴你爲什麼會發生這種情況,因爲您沒有提供有關如何設置這些變量的信息。最有可能的不好的是MAIN,但很難確定。

+0

感謝您的反饋,不幸的是,這是某人的代碼,所以這是很難導航的原因。我會研究你提到的內容,並提供更多信息或開一個新問題。謝謝 – 2014-12-06 17:34:09