Tôi mới đến Fortran. Tôi đang làm việc trên một dự án nghiên cứu, nơi tôi đang sử dụng một dự án nguồn mở có một số tệp được phân phối trong nhiều thư mục. tôi tìm thấy sự phụ thuộc của mỗi chương trình nhưng không thể tìm ra cách biên dịch chúng.cách biên dịch Dự án Fortran đa thư mục có giao diện, mô-đun và chương trình con
Tôi có mã nguồn được phân phối trong ba thư mục. a) module b) giao diện c) thủ tục con
tôi muốn chạy một chương trình có tên là 'Main.f90' trong thư mục chương trình con, chương trình này có sự phụ thuộc của mã nguồn từ mô-đun và giao diện thư mục.
Tôi đang sử dụng nhật thực cho cấu trúc thư mục và makefile để biên dịch.
Bất kỳ trợ giúp nào về điều này đều được đánh giá cao.
UPDATE: Tôi làm theo các câu trả lời đăng bởi @MBR và @Stefan, vì một lý do VPATH đã không thể tìm thấy chương trình mã nguồn vì vậy tôi đã rõ ràng đường dẫn đến những thư mục nguồn trong Makefile của tôi. bên dưới là tập lệnh tạo tệp của tôi.
.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ôi đã biên soạn tất cả các mô đun và được đặt trong thư mục Mô-đun của thư mục gốc. Tất cả việc biên dịch diễn ra tốt đẹp. Tôi gặp lỗi khi tôi tạo tệp thi hành. Tôi nhận được lỗi sau.
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_ 'đang được sử dụng trong' tệp getdat và iargc đã được biên soạn. tại sao có lỗi trong khi làm cho thực thi nói tham chiếu không xác định? tôi đang thiếu gì?
+1 Tôi không biết về việc cung cấp cho 'VPATH' nhiều thư mục – Yossarian
Cảm ơn MBR Makefile của bạn rất có ý nghĩa đối với tôi. Tôi đã cố viết nhưng không thể chạy qua chương trình. Vấn đề là tôi có tất cả các giao diện được tạo cho một vài chương trình con và các giao diện đó được liệt kê trong chương trình Main.f90 sử dụng từ khóa "USE". Các mô-đun tương tự cũng được sử dụng trong Main.f90 sử dụng từ khóa "USE". Vì có các tệp lớn, cách tôi có thể tự động bao gồm và liên kết chúng thay vì liệt kê từng tệp như bạn đã đề cập trong Câu trả lời của bạn như MODOBJ = module1.o module2.o ... – user2721314
Xem bản chỉnh sửa của tôi câu hỏi mới của bạn. – MBR