2012-10-30 119 views
0

在延續與我先前的問題 Makefile - compiling back and forthmakefile文件編譯回 - 向前 - 跟進

我創建一個Makefile中做出了嘗試。這兩個子目錄是HAM-src和GFS-src。但是,我仍然無法建立它。我粘貼下面我的Makefile:

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 [email protected] $(OBJGFS_MOD) $(OBJHAM) $(CFS_LIBS) -L$(LDFLAGS) 

$(objdir)/%.o: $(cfssrcdir)/%.f 
    $(F77) $(FFLAGS) -c $< -o [email protected] 

$(objdir)/%.o: $(hamsrcdir)/%.f90 
    $(F90_r) $(F90FLAGS) -c $< -o [email protected] 
########## 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 [email protected] 

$(objdir)/cnvcld_v.o: $(cfssrcdir)/cnvcld_v.f 
     $(F77) $(FFLAGM) -c $(cfssrcdir)/cnvcld_v.f -o [email protected] 

錯誤:

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工作不正常。它按照來源定義的順序進行。

回答

0

這是很難解開(一最小的,完整的例子真的會幫助),但我建議你改變這種

ham_submodel.o: ham_control.o ham_namelist.o $(objdir)/resol_def.o 

這個

$(objdir)/ham_submodel.o: ham_control.o ham_namelist.o $(objdir)/resol_def.o 

,看看是否有解決了第一個問題。我不明白你問題的最後一行(「另一個問題......」)。

+0

不,它沒有奏效。事實上,其餘代碼的.o文件可在objdir中找到。請參閱鏈接 - http://stackoverflow.com/questions/1139271/makefiles-with-source-files-in-different-directories?rq=1 由RC給出的方法 - 它會幫助我的情況? – jkp

+0

我已經在我的任務中取得進展,並希望向您展示。我可以有你的電子郵件ID,以便我可以給你更具體的細節?謝謝! – jkp

+0

@jkp:編輯你的問題會更有意義。 – Beta