2012-01-13 17 views
13

मैं वर्तमान में (जैसे कि मुख्य कार्यक्रम foo जो मॉड्यूल bar पर निर्भर करता है के रूप में) मॉड्यूल के आधार पर कार्यक्रमों संकलन के लिए दिखना चाहिए निर्दिष्ट करें इस प्रकार है:निर्देशिका जहां gfortran मॉड्यूल

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

यह ठीक काम करता है जब foo.f90 और bar.f90 में हैं एक ही निर्देशिका। जब मैं foo.f90 में use bar पर कॉल करता हूं तो मैं एक निर्देशिका निर्दिष्ट करता हूं जहां gfortran को bar.o देखना चाहिए? (यानी मैं यह निर्दिष्ट नहीं करना चाहता कि संकलक bar.o को विशेष रूप से लिंक करना चाहिए, मैं बस इसे ढूंढना चाहता हूं।)

+0

के बाद नहीं, क्या आपने gfortran -I/path/to/the/obj/file को आजमाया है? –

उत्तर

19

आप gfortran बता सकते हैं जहां आपकी मॉड्यूल फाइलें (.mod फ़ाइलें) -I कंपाइलर ध्वज के साथ स्थित हैं। इसके अलावा, आप कंपाइलर को -J कंपाइलर ध्वज के साथ संकलित मॉड्यूल कहां रख सकते हैं। gfortran man page में "निर्देशिका खोज के लिए विकल्प" अनुभाग देखें।

मैं इन ऑब्जेक्ट्स (.o फाइलें) और मेरी मॉड्यूल फ़ाइलों को एक ही निर्देशिका में रखने के लिए उपयोग करता हूं, लेकिन मेरी सभी स्रोत फ़ाइलों के लिए एक अलग निर्देशिका में, इसलिए मैं अपनी स्रोत निर्देशिका को अव्यवस्थित नहीं करता हूं। उदाहरण के लिए,

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 

जबकि कमांड लाइन पर बाहर टाइप करने के लिए प्रयास का एक बहुत की तरह ऊपर दिखता है, मैं आम तौर पर मेरी makefiles में इस विचार का उपयोग करें।

बस संदर्भ के लिए, समकक्ष इंटेल फोर्टन कंपाइलर झंडे -I और -module हैं। अनिवार्य रूप से ifort विकल्प -module के साथ प्रतिस्थापित करता है। ध्यान दें कि मॉड्यूल के बाद एक जगह है, लेकिन जे

7

मॉड्यूल वाले फोरट्रान स्रोत कोड को संकलित करते समय, एक .mod (आमतौर पर नाम का नाम फ़ाइल मॉड्यूल नाम के समान है) फ़ाइल ऑब्जेक्ट फ़ाइल के साथ बनाई गई है। आधुनिक फ़ाइल स्रोत फ़ाइल के रूप में ही निर्देशिका है कि कि मॉड्यूल उपयोग कर रहा है में होना चाहिए, या यह मैं ध्वज का उपयोग कर संकलन समय की ओर इशारा किया जाना चाहिए:

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

ध्यान दें कि आधुनिक जरूरतों पर अस्तित्व के लिए foo.f90 संकलन समय।