2012-01-13 24 views
13

Tôi hiện biên dịch chương trình dựa trên các module (ví dụ như chương trình chính foo mà phụ thuộc vào mô-đun bar) như sau:Chỉ định thư mục nơi gfortran nên tìm kiếm các module

gfortran -c bar.f90 
gfortran -o foo.exe foo.f90 bar.o 

này hoạt động tốt khi foo.f90bar.f90 đang trong cùng một thư mục. Làm cách nào để chỉ định thư mục mà gfortran nên tìm kiếm bar.o khi tôi gọi use bar trong foo.f90? (tức là tôi không muốn chỉ định rằng trình biên dịch nên liên kết bar.o một cách cụ thể, tôi chỉ muốn nó tìm thấy nó.)

+0

bạn đã thử gfortran -I/path/to/the/obj/file chưa? –

Trả lời

19

Bạn có thể cho biết các tập tin mô-đun của bạn (tệp .mod) nằm ở đâu với cờ trình biên dịch -I. Ngoài ra, bạn có thể cho trình biên dịch biết nơi đặt các mô-đun được biên dịch với cờ biên dịch -J. Xem phần "Tùy chọn tìm kiếm thư mục" trong gfortran man page.

Tôi sử dụng chúng để đặt cả đối tượng (tệp .o) và tệp mô-đun của tôi vào cùng một thư mục, nhưng trong một thư mục khác với tất cả các tệp nguồn của tôi, vì vậy tôi không làm lộn xộn thư mục nguồn của mình. Ví dụ,

SRC = /path/to/project/src 
OBJ = /path/to/project/obj 
BIN = /path/to/project/bin 

gfortran -J$(OBJ) -c $(SRC)/bar.f90 -o $(OBJ)/bar.o 
gfortran -I$(OBJ) -c $(SRC)/foo.f90 -o $(OBJ)/foo.o 
gfortran -o $(BIN)/foo.exe $(OBJ)/foo.o $(OBJ)/bar.o 

Trong khi ngoại hình trên như rất nhiều nỗ lực để gõ ra trên dòng lệnh, tôi thường sử dụng ý tưởng này trong makefiles tôi.

Chỉ để tham khảo, các cờ trình biên dịch fortran tương đương của Intel là -I-module. Về cơ bản, ifort thay thế tùy chọn -J bằng -module. Lưu ý rằng có một khoảng trống sau mô-đun, nhưng không phải sau khi J.

7

Khi biên dịch mã nguồn Fortran chứa các mô-đun, một .mod (thường là tên của tập tin giống như tên mô-đun) được tạo cùng với tệp đối tượng. Các tập tin .mod phải ở trong cùng thư mục với tập tin nguồn đó là sử dụng mô-đun đó, hoặc nó phải được trỏ tới vào thời gian biên dịch sử dụng cờ -I:

gfortran -c bar.f90 
gfortran -c foo.f90 -I$PATH_TO_MOD_FILE 
gfortran -o foo.exe foo.o bar.o 

Lưu ý rằng .mod nhu cầu để tồn tại ở thời gian biên dịch foo.f90.

Các vấn đề liên quan