Fortran'a yeni oldum. Birden fazla klasöre dağıtılmış birkaç dosya içeren bir açık kaynak projesi kullandığım bir araştırma projesi üzerinde çalışıyorum. Her programın bağımlılığını buldum ama onları nasıl derleyeceğimi anlayamadım.Arabirimler, modüller ve alt yordamlara sahip çok klasörlü Fortran Project'in nasıl derleneceği
Üç klasörde dağıtılmış kaynak kodum var. a) alt rutinler klasöründe 'Main.f90' olarak adlandırılan bir programı çalıştırmak istiyorum b) arayüzleri c) alt rutinler
modülleri, bu program modülleri ve arabirimler klasörlerden kaynak kodlarının bağımlılık vardır.
Klasör yapısı için eclipse ve derlemek için makefile kullanıyorum.
Bu konuda herhangi bir yardım için teşekkür ederiz.
GÜNCELLEME: Bazı nedeni vpath kaynak kodunda programları bulmak mümkün olmadı için Ben bu yüzden açıkça benim Makefile bu kaynak klasörün yolunu verdi @MBR ve @Stefan tarafından gönderildi cevabı izledi. aşağıda benim make dosyası betiğidir.
.PHONY: Mopac_exe clean
# Change this line if you are using a different Fortran compiler
FORTRAN_COMPILER = gfortran
SRC = src
#make main program
Mopac_exe: subroutines mopac.o
$(FORTRAN_COMPILER) mopac.o *.o -O2 -g -o bin/Mopac_exe -I Modules/
#compile all the subroutines
subroutines: interfaces
$(FORTRAN_COMPILER) -c $(SRC)/subroutines/*.F90 -J Modules/Subroutines/ -I Modules/
#compiles all the interfaces
interfaces: modules
$(FORTRAN_COMPILER) -c $(SRC)/interfaces/*.f90 -J Modules/
# build all the modules and generate .mod file in Modules directory
modules: build_vast_kind
$(FORTRAN_COMPILER) -c $(SRC)/modules/*.f90 -J Modules/
$(FORTRAN_COMPILER) -c $(SRC)/modules/*.F90 -J Modules/
# compile vastkind.f90 files and generates the .mod file in Modules directory.Every other Modules and interfaces are dependent on this.
build_vast_kind:clean
$(FORTRAN_COMPILER) -c $(SRC)/modules/vastkind.f90 -J Modules/
clean:
rm -f bin/Mopac_exe *.mod
rm -f Modules/*.mod
rm -f *.o
Tüm modülleri derledim ve kök Klasörünün Modüller dizinine yerleştirdim. Tüm derleme iyi gider. Yürütülebilir dosyayı oluşturduğumda hata alıyorum. Hata alıyorum. getdat dosya ve iargc 'kullanılıyor'
gfortran mopac.o *.o -O2 -g -o bin/Mopac_exe -I Modules/
mopac.o: In function `main':
mopac.F90:(.text+0x27c1): multiple definition of `main'
mopac.o:mopac.F90:(.text+0x27c1): first defined here
getdat.o: In function `getdat_':
getdat.F90:(.text+0x22): undefined reference to `iargc_'
getdat.F90:(.text+0xf2): undefined reference to `getarg_'
symr.o: In function `symr_':
symr.F90:(.text+0xd3f): undefined reference to `symp_'
writmo.o: In function `writmo_':
writmo.F90:(.text+0x20c2): undefined reference to `volume_'
collect2: error: ld returned 1 exit status
make: *** [Mopac_exe] Error 1
`iargc_ zaten derlenmektedir. tanımsız referansı söyleyerek çalıştırılırken neden bir hata var? Neyi kaçırıyorum?
+1 VPATH' çoklu dizinleri vermeyi bilmiyordum – Yossarian
Teşekkür ederim MBR Makefile bana çok şey ifade ediyor. Yazmaya çalıştım ama programı çalıştıramazdım. Sorun şu ki, birçok altprogram için oluşturulan tüm arabirimlere sahibim ve bu arayüzler "USE" anahtar sözcüğünü kullanarak Main.f90 programında listeleniyor. Benzer şekilde, modüller "USE" anahtar sözcüğünü kullanarak Main.f90'da da kullanılır. Büyük dosyalar olduğu için, her bir dosyayı MODOBJ = module1.o module2.o gibi yanıtınızda belirttiğiniz gibi listelemek yerine, bunları dinamik olarak ekleyip bunları nasıl bağlayabiliyorum? – user2721314
Umarım yanıt veren düzenlememe bakın yeni sorunuz – MBR