2012-03-24 11 views
6
  • उपयोगिता: Nmake
  • प्लेटफ़ॉर्म: Windows 7

मैं निम्नलिखित है Makefilenmake चर जोड़कर

FILE = $(shell) *.c 
FILE += $(shell) *.cpp 

exec: 
    @echo $(FILE) 

इस मेकअप के साथ पूरी तरह ठीक काम करता है। यह nmake

makefile(2) : fatal error U1036: syntax error : too many names to left of '=' 
Stop. 

के कारण निम्न त्रुटि को फेंकता है कारण क्या हो सकता है?

लाइन

FILE += $(shell) *.cpp 

nmake पूरी तरह से ठीक काम करता है बिना

उत्तर

5

+= सिंटैक्स एक GNU Make एक्सटेंशन है जो 80 के उत्तरार्ध में सूर्य के make में अग्रणी था। यह POSIX मानक make, या मूल AT & टी make के लिए वाक्यविन्यास का हिस्सा नहीं है।

यदि आप एक्सटेंशन का उपयोग करते हैं, तो आप उस सिस्टम पर स्विच करते समय पकड़े जाते हैं जो उनका समर्थन नहीं करता है। आपको या तो चीजों को फिर से काम करना होगा (हार्ड) या मूल प्रणाली के साथ चिपकना होगा। यह देखते हुए कि मैक्रो shell परिभाषित नहीं है

FILE1 = $(shell) *.c 
FILE2 = $(shell) *.cpp 
FILE = $(FILE1) $(FILE2) 

exec: 
    @echo $(FILE) 

या, यहां तक ​​कि:


एक तरह से nmake के साथ काम करने फ़ाइल को संशोधित करने के लिए शायद है

FILE1 = *.c 
FILE2 = *.cpp 
FILE = $(FILE1) $(FILE2) 

exec: 
    @echo $(FILE) 
2

के बजाय

FILE = $(shell) *.c 
FILE += $(shell) *.cpp 

आप

FILE = $(shell) *.c 
FILE = $(shell) *.cpp $(FILE) 

का उपयोग करना चाहिए विस्तार रणनीति nmake से भिन्न है और बनाते हैं। एनएमके नियमों का मूल्यांकन शुरू करने से पहले सभी को विस्तारित करता है, जबकि इसे आवश्यक समय में करता है और क्योंकि इससे समस्याएं होती हैं, इसमें जानकारी पृष्ठों में वर्णित विस्तार के दो स्वाद होते हैं।

मुझे व्यक्तिगत रूप से एनएमके के तरीके को बेहतर पसंद है। और वैसे, "nmake" के बजाय "jom" का उपयोग करें।

+0

अंतिम पंक्ति 'रिकर्सिव मैक्रो' त्रुटि का कारण बन सकती है। –

+1

नहीं, ऐसा नहीं है। – Lothar

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