2011-04-19 11 views
7

मैं अपने नियम पैटर्न में ifeq का उपयोग करने की कोशिश कर रहा हूं और मुझे इसके साथ समस्याएं हैं। यह नियम मैं साथ परेशानी हो रही हूँ:मेकफ़ाइल ifeq समस्या

$(OBJS): $(OBJDIR)/%.o : ../%.c 
    @mkdir -p $(dir [email protected]) 
    ifeq(mcc.exe,$(CC)) 
     o_file:=$(shell echo [email protected] | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/') 
     $(CC) $(CFLAGS) $< -o $(o_file) 
    else 
     $(CC) $(CFLAGS) $< -o [email protected] 
    endif 

जब मैं इस चलाने के लिए, मैं:

"/bin/sh: -c: line 0: syntax error near unexpected token `mcc.exe,mcc.exe' 
/bin/sh: -c: line 0: `ifeq(mcc.exe,mcc.exe)'" 

लेकिन, जब मैं दांतेदार बनाना उपयोग नहीं करते हैं, तो मैं मिलता है: "Makefile: 77 : * लापता विभाजक। रोको। "

मैं जीएनयू का उपयोग कर रहा हूं 3.81 सिगविन पर। Ifeq के साथ पूरा मुद्दा इस तथ्य से आता है कि मेरे पास दो टूलचेन्स के लिए मेकफ़ाइल समान है और उनमें से एक (mcc.exe) /cygdrive/c/.../something पथों का सामना नहीं कर सकता है, लेकिन इसके बजाय सी होना चाहिए: /.../something पथ। यदि आप इस के आसपास काम करने के किसी अन्य तरीके से जानते हैं, तो मैं भी बहुत आभारी रहूंगा!

अग्रिम धन्यवाद!

+5

मुझे जवाब मिल गया है! कोई संकेत नहीं होना चाहिए, लेकिन ifeq और खुले ब्रैकेट '('। 'समस्या हल हो गई है! उम्मीद है कि यह किसी की मदद करता है ... – Nikola

+0

यह मुझे थोड़ा सा भी धन्यवाद, धन्यवाद – Sam

उत्तर

10

ifeq..., else, और endif वाली रेखाएं एक टैब से शुरू नहीं होनी चाहिए। यदि वे करते हैं तो उन्हें नुस्खा का हिस्सा माना जाता है और खोल में भेजा जाता है; यह आपको सिंटैक्स त्रुटि की ओर ले जाता है जो आपको/bin/sh से मिलता है; उदाहरण के लिए the make manual देखें।

मुझे बिल्कुल यकीन नहीं है कि जब आप इंडेंटेशन का उपयोग नहीं करते हैं तो आपको कोई त्रुटि क्यों मिलती है। शायद आप इस तरह के नुस्खा में एक चर परिभाषित नहीं कर सकते हैं?

संपादित करें: मुझे लगता है कि आपको जवाब मिल गया है। तो, कोई इंडेंटेशन नहीं है, और ifeq और कंस्ट्रैसिस के बीच एक जगह है।