चलाता है तो मेरे पास एक प्रोजेक्ट है जिसका मेकफ़ाइल विशेष रूप से जीएनयू मेक के लिए विशेषताओं का उपयोग करता है। अफसोस की बात है कि ऐसे प्लेटफ़ॉर्म हैं जिन्हें हमें समर्थन देना चाहिए जहां make
चलाते समय जीएनयू बनाना अभी भी डिफ़ॉल्ट नहीं है।पता लगाना (गैर-) जीएनयू जब कोई 'मेक'
मेरे सहयोगियों में से एक इस द्वारा काटा गया था, जब एक गैर-जीएनयू कार्यान्वयन हमारे कोड को सही तरीके से बनाने में विफल रहा (यह एक स्वचालित चर को एक खाली स्ट्रिंग में विस्तारित करता है)। मैं इसके बजाय एक स्पष्ट त्रुटि संदेश उत्पन्न करके, फिर से होने से रोकना चाहता हूं।
गैर-जीएनयू बनाने से जीएनयू बनाने में अंतर करने के लिए Makefile
में मैं क्या लिख सकता हूं, एक स्पष्ट त्रुटि प्रिंट कर सकता हूं, और बाहर निकल सकता हूं?
मैं पहले से ही GNUmakefile
करने के लिए अपने असली makefile का नाम बदलने, और Makefile
में एक छोटा सा ठूंठ डालने में कोई समाधान खोज निकाला है, लेकिन मैं नहीं बल्कि कुछ और था प्रत्यक्ष।
बीटा और दान मोल्डिंग द्वारा जवाब वास्तव में अच्छा और सरल हैं, लेकिन AIX 6.1 पर, मेकअप कार्यान्वयन उनमें से या तो संभाल नहीं कर सकते हैं:
$ cat testmake
foo:
touch foo
ifeq ($(shell $(MAKE) -v | grep GNU),)
$(error this is not GNU Make)
endif
ifeq "${MAKE_VERSION}" ""
$(info GNU Make not detected)
$(error ${MIN_MAKE_VER_MSG})
endif
$ /usr/bin/make -f testmake
"testmake", line 5: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 6: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 7: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 8: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 11: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 12: make: 1254-055 Dependency line needs colon or double colon operator.
"testmake", line 13: make: 1254-055 Dependency line needs colon or double colon operator.
make: 1254-058 Fatal errors encountered -- cannot continue.
मैं दोनों पुरातन और आधुनिक पर इसी तरह के मुद्दों में चलाने सन के निर्माण के संस्करण (सोलारिस 8 & 10)। वह कम महत्वपूर्ण है, लेकिन प्रबंधन करना अच्छा होगा।
जीएनयू बनाने का कौन सा संस्करण आप चल रहे हैं? – bta
आप सही हैं। जिस दृष्टिकोण को मैंने लिया था वह जीएनयूइज्म पर बहुत अधिक निर्भर था, इसलिए गैर-जीएनयू कार्यान्वयन के साथ * सभी * काम नहीं कर सकता है। अब मैं संदेह कर रहा हूं कि केवल एक मेकफ़ाइल (यानी शेल स्क्रिप्ट या अन्य बाहरी संसाधनों का उपयोग किए बिना) का उपयोग करके अपना लक्ष्य प्राप्त करने का एक पोर्टेबल तरीका है। मैंने अपना जवाब रद्द कर दिया है। –