首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >makefile-编译-来回-后续

makefile-编译-来回-后续
EN

Stack Overflow用户
提问于 2012-10-30 13:16:15
回答 1查看 241关注 0票数 0

继续我之前的问题Makefile - compiling back and forth

我尝试创建一个Makefile。这两个子目录是HAM-src和GFS-src。然而,我仍然无法构建它。我将Makefile粘贴到下面:

代码语言:javascript
复制
export
SHELL = /bin/sh

top_srcdir=./Temp
objdir=$(top_srcdir)/obj
bindir=${exec_prefix}/bin
cfssrcdir=${top_srcdir}/GFS-src
hamsrcdir=${top_srcdir}/HAM-src
incdir=${top_srcdir}/include
exec=${bindir}/esm_gfs-ham_v0
PROG=$(exec)

LDR = mpxlf90_r -qsmp=noauto
FFLAG90  = $(OPTS90) $(FINCS) -qfree=f90 -NS2048 -qmoddir=$(objdir) -I$(objdir)
FFLAGM = -NS2048 -qfixed -qmoddir=$(objdir) -I$(objdir)

F77     = mpxlf95
F90     = mpxlf95
F90_x   = xlf90_r
F90_r   = mpxlf95_r

SRCHAM = $(hamsrcdir)/ham_control.f90 $(hamsrcdir)/mo_filename.f90 \
         $(hamsrcdir)/ham_namelist.f90 $(hamsrcdir)/ham_submodel.f90 \
         $(hamsrcdir)/ham_submodel_diag.f90 $(hamsrcdir)/ham_ham.f90

SRCGFS_MOD=$(cfssrcdir)/machine.f $(cfssrcdir)/resol_def.f \
           $(cfssrcdir)/omegas.f $(cfssrcdir)/cnvcld_v.f

OBJGFS_MOD = $(patsubst $(cfssrcdir)/%.f,$(objdir)/%.o,$(SRCGFS_MOD))
OBJHAM = $(patsubst $(hamsrcdir)/%.f90,$(objdir)/%.o,$(SRCHAM))

.SUFFIXES: $(SUFFIXES) .f90 .f .o

all: $(PROG)

$(PROG): $(OBJHAM) $(OBJGFS_MOD)
    $(LDR) $(CFS_LDFLAGS) -o $@ $(OBJGFS_MOD) $(OBJHAM) $(CFS_LIBS) -L$(LDFLAGS)

$(objdir)/%.o: $(cfssrcdir)/%.f
    $(F77) $(FFLAGS) -c $< -o $@

$(objdir)/%.o: $(hamsrcdir)/%.f90
    $(F90_r) $(F90FLAGS) -c $< -o $@
########## dependencies for $(hamsrcdir) ###########
ham_filename.o: ham_control.o
ham_namelist.o: ham_control.o ham_filename.o
ham_submodel.o: ham_control.o ham_namelist.o $(objdir)/resol_def.o
ham_submodel_diag.o: ham_submodel.o
########## dependencies for $(cfssrcdir) ###########
$(objdir)/omegas.o:    $(cfssrcdir)/omegas.f
        $(F77) $(FFLAGM) -c $(cfssrcdir)/omegas.f -o $@

$(objdir)/cnvcld_v.o:    $(cfssrcdir)/cnvcld_v.f
        $(F77) $(FFLAGM) -c $(cfssrcdir)/cnvcld_v.f -o $@

错误:

代码语言:javascript
复制
mpxlf95_r -q64 -O3 -qstrict -qMAXMEM=-1 -qarch=auto -qtune=auto -qcache=auto -qfloat=fltint -qsuffix=cpp=f90 -lessl_r -lmass -lmassv -I./Temp/include -I./Temp/HAM-src -qmoddir=./Temp/obj -I./Temp/obj -c ./Temp/HAM-src/ham_namelist.f90 -o ./Temp/obj/ham_namelist.o
** ham_namelist   === End of Compilation 1 ===
1501-510  Compilation successful for file ham_namelist.f90.

mpxlf95_r -q64 -O3 -qstrict -qMAXMEM=-1 -qarch=auto -qtune=auto -qcache=auto -qfloat=fltint -qsuffix=cpp=f90 -lessl_r -lmass -lmassv -I./Temp/include -./Temp/HAM-src -qmoddir=./Temp/obj -I./Temp/obj -c ./Temp/HAM-src/ham_submodel.f90 -o ./Temp/obj/ham_submodel.o
"./Temp/HAM-src/ham_submodel.f90", line 425.7: 1514-219 (S) Unable to access module symbol file for module resol_def. Check path and file permissions of file. Use association not done for this module.
1501-511  Compilation failed for file ham_submodel.f90.
gmake: *** [/gpfs1/home/cccrmod/ham_expt_dec11/regrid_test/CFS-HAM/SORC_CFS-HAM/Temp/obj/ham_submodel.o] Error 1

为什么makefile在遇到依赖时不编译resol_def.f模块?

另一个问题-我的makefile不能正常工作。它按照定义源的顺序进行。

EN

回答 1

Stack Overflow用户

发布于 2012-10-30 14:08:01

这很难解决(一个最小的、完整的示例确实会有所帮助),但我建议您对此进行更改

代码语言:javascript
复制
ham_submodel.o: ham_control.o ham_namelist.o $(objdir)/resol_def.o

到这个

代码语言:javascript
复制
$(objdir)/ham_submodel.o: ham_control.o ham_namelist.o $(objdir)/resol_def.o

看看这是否解决了第一个问题。我不明白你问题的最后一行(“另一个问题……”)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13133051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档