Makefile से शेल कमांड में इको का उपयोग कैसे करें?


2

मेरे पास एक जीएनयू मेकफाइल । यह लिनक्स, सोलारिस और OS X पर ठीक चलता है। हालांकि, Cygwin-32, Cygwin-64 और MinGW के तहत, यह उत्पादन करता है:

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo 2.0.4(0.287/5/3) | egrep -i -c "fc22.i686"'

कोई रेखा 0 नहीं है; और फेडोरा 22 के लिए परीक्षण वास्तव में लाइन 73 होता है:

IS_FEDORA22_i686 = $(shell echo $(RELEASE) | $(EGREP) -i -c "fc22.i686")

Cygwin और MinGW के साथ क्या हो रहा है? इससे भी महत्वपूर्ण बात, मैं इसे कैसे ठीक कर सकता हूं?


मुझे पता है कि यह एक खिंचाव की तरह लगता है, इसलिए यहां एक स्क्रीन कैप्चर है। ऊपरी बाएँ मिनगॉव है। केंद्र Cygwin-32 है। निचला दायाँ साइग्विन -64 है।

enter image description here

जवाबों:


2

समस्या यह है कि खोल कोष्ठक को देख रहा है $RELEASE किसी भी उद्धरण के बाहर, इसलिए उन्हें व्याख्या करने की कोशिश कर रहा है। कोशिश करने के लिए दो चीजें: संदर्भ के आसपास डबल-कोट्स डालें $(RELEASE), और उपयोग करें := प्रति इस । उदाहरण के लिए:

SHELL:=/bin/bash.  #at the top of the makefile
IS_FEDORA22_i686 := $(shell echo "$(RELEASE)" | $(EGREP) -i -c "fc22.i686")

संपादित करें: आपका नाम जैसे स्विच के साथ आउटपुट -m आमतौर पर कोई शेल मेटाचैकर नहीं होता है। यही समस्या किसी भी चर के साथ हो सकती है। इसलिए इसे सेट करना उपयोगी है SHELL आपके मेकफाइल में - यदि उपयोगकर्ता चल रहा है csh, आपको अलग-अलग समस्याएं होंगी bash


यदि आपके पास एक परीक्षण मशीन है, तो git clone https://github.com/weidai11/cryptopp.git एक संबंधित प्रश्न: अन्य चर क्यों हैं, जैसे SYSTEM, समस्याओं का कारण नहीं?
jww

धन्यवाद फिर से cxw मैंने अगला सवाल स्टैक ओवरफ्लो पर ले जाया: चर जो ओवरराइड और "बस विस्तार योग्य" की अनुमति देता है?
jww
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.