我似乎无法调试此问题,有人可以帮忙吗? * .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 :(得分:1)
这个makefile很乱。为什么在make $(EXE)
配方中连续5次列出相同的命令all
?为什么使用$(<F:.f90=.f90)
只是用相同的字符串.f90
替换字符串.f90
,基本上是无操作?
此外,我们在此处没有足够的信息来回答您的问题:您尚未提供变量MAINOBJ
或OBJ_MODEL
的定义,或者更重要的是,{{ 1}}。至少有一个是错的。除非您错误地转录了错误消息(请务必剪切并粘贴实际错误,请不要尝试手动输入!!),然后执行以下操作:
MAIN
告诉你问题是什么;请注意,在make[1]: *** No rule to make target 'media/f/fv/ED-2.1/ED/src/utils/allometry.f90', needed by 'allometry.o'. Stop.
之前,此路径名的开头没有斜杠(/
)。所以这不是一条绝对的道路,它是一条相对的道路。这意味着make实际上是在尝试查找名为media
的文件,该文件显然不会存在。
我们无法告诉您为什么会发生这种情况,因为您还没有提供有关如何设置这些变量的信息。很可能坏的是/media/f/fv/ED-2.1/ED/build/bin/media/f/fv/ED-2.1/ED/src/utils/allometry.f90
,但很难确定。