2013-02-28 6 views
5

मुझे सी मेकफ़ाइल के साथ कुछ परेशानी हो रही है।सी मेकफ़ाइल समस्या: "gcc: -lm: लिंकर इनपुट फ़ाइल अप्रयुक्त है क्योंकि लिंकिंग mpicc -lm 3 डी-ELM.o -o 3D-ELM.exe नहीं किया गया है"

यहाँ Makefile की सामग्री हैं:

PROJECT = 3D-ELM 
MPICC = mpicc 
CLAGS = -g -O3 
LIBS = -lm 
SRC = src_el 
OBJECTS = $(PROJECT).o 

$(PROJECT).exe : $(OBJECTS) 
     $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe 

$(PROJECT).o : $(SRC)/$(PROJECT).c 
     $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c 

clean: 
     rm -rf *o $(PROJECT) 

जब मैं बनाने के लिए, यहाँ त्रुटि है:

gcc: -lm: linker input file unused because linking not done

किसी को भी पता है क्या गलत है?

अग्रिम में बहुत धन्यवाद,


संपादित करें: समझ गया। ऑब्जेक्ट फ़ाइल बनाते समय मुझे libs को पास करने की आवश्यकता नहीं है ... दोह! बैंग्स डेस्क बंद सिर

अपने सभी सहायता लोगों के लिए धन्यवाद,

उत्तर

7

समस्या makefile के इस हिस्से से आता है:

$(PROJECT).o : $(SRC)/$(PROJECT).c 
     $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c 

इस कदम आप केवल संकलक लागू कर रहे हैं पर। -c स्विच केवल एक ऑब्जेक्ट फ़ाइल को संकलित करने के लिए कंपाइलर को बताता है, और लिंकर बिल्कुल शामिल नहीं है। चूंकि लिंक करने के लिए कुछ भी नहीं है, $(LIBS) हिस्सा अनावश्यक है।

वास्तविक जोड़ने निम्नलिखित चरण में किया जाता है:

$(PROJECT).exe : $(OBJECTS) 
     $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe 

यह वह जगह है, जहां व्यक्तिगत वस्तु फ़ाइलों पुस्तकालयों के साथ एक साथ विलय कर रहे हैं एक निष्पादन योग्य उत्पादन करने के लिए। संकलक स्वयं को इस बिंदु पर नहीं बुलाया जाता है क्योंकि स्रोत फ़ाइलों को ऑब्जेक्ट फ़ाइलों में पहले ही बदल दिया गया है।

संबंधित मुद्दे