2014-12-06 106 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