Makefile में कमांड मंगलाचरण की गूंज?


147

मैंने एक असाइनमेंट के लिए एक प्रोग्राम लिखा था, जिसे स्टैडआउट में इसके आउटपुट को प्रिंट करना है। असाइनमेंट स्पेक के लिए मेकफाइल के निर्माण की आवश्यकता होती है, जिसे जब make run > outputFileप्रोग्राम को चलाना चाहिए और आउटपुट को एक फाइल में लिखना चाहिए, जिसमें एक SHA1 फिंगरप्रिंट है जो कल्पना में दिया गया है।

मेरी समस्या यह है कि मेरा मेकअप:

...
run:
     java myprogram

उस कमांड को भी प्रिंट करता है जो मेरे प्रोग्राम (जैसे जावा मायप्रोग्राम) को आउटपुट फाइल में चलाता है, ताकि मेरी फाइल में यह एक्स्ट्रा लाइन शामिल हो जिससे फिंगरप्रिंट गलत हो।

क्या कमांड लाइन में गूंजती कमांड कमांड के बिना कमांड को निष्पादित करने का कोई तरीका है?

जवाबों:


247

@कमांड के आरंभ में जोड़ें gmake को बताएं कि कमांड निष्पादित नहीं हो रही है। ऐशे ही:

run:
     @java myprogram

जैसा कि ओली ने सुझाव दिया, यह मेक की विशेषता है न कि बैश की।

दूसरी ओर, बैश को तब तक निष्पादित नहीं किया जाएगा जब तक कि आप इसे स्पष्ट रूप से करने के लिए नहीं कहते (यानी -xविकल्प के साथ )।


6
+1। लेकिन सिर्फ ओपी के भ्रम को दूर करने के लिए, शायद यह स्पष्ट करने योग्य है कि यह मेक की एक विशेषता है, न कि बैश की।
ओलिवर चार्ल्सवर्थ

1
@OliCharlesworth: समझ में आता है, कहा कि। धन्यवाद।

क्या सभी इको को अक्षम करने का एक तरीका है? या इसे एक खंड के लिए बंद करने के लिए, और बाद में वापस?
बेनुबर्ड

2
@Benubird make -sऐसा करता है, और IMHO वैसे भी यहाँ एक बेहतर समाधान है। इस प्रश्न के उत्तर के रूप में इसे हाल ही में पोस्ट किया गया था।
ट्रिपलए

1
यह एक के लिए काम नहीं करता है ... तो बयान :( किसी भी विचार?
user1623521

74

और भी सरल, उपयोग make -s(साइलेंट मोड)!


3
Upvote: यह वास्तव में यहाँ स्वीकृत उत्तर होना चाहिए। @कमांड के साथ अपने मेकफाइल को छिड़कने से डिबग करना मुश्किल हो जाता है और बहुत सी अव्यवस्था जुड़ जाती है।
ट्रिपल

11
मैं मानता हूं कि यह रास्ता है - लेकिन ध्यान दें, मूल समस्या वर्णन में, मैं एक ऐसा नहीं करूंगा - मेरा प्रशिक्षक होगा। इस प्रकार, मेरे पास उत्तीर्ण किए गए झंडे पर कोई नियंत्रण नहीं होगा। मुझे मेकफाइल के भीतर से आउटपुट को नियंत्रित करने की आवश्यकता थी। हालांकि वास्तविक दुनिया में सबसे व्यावहारिक समाधान के लिए Upvote।
noobler

6
.SILENT:लक्ष्य का उपयोग कर, आप इसे स्वयं नियंत्रित कर सकते हैं । देखें make.mad-scientist.net/managing-recipe-echoing
MadScientist

वास्तव में यदि आपके पास इस तरह की चेतावनी है -Wallतो भी उन्हें प्रिंट करता है। -sयदि आप चेतावनियाँ भी देखना चाहते हैं तो बेशक आप इसका उपयोग क्यों करेंगे ?
उपयोगकर्ता 81862311

33

आप भी उपयोग कर सकते हैं .SILENT

.SILENT: run
hi:
     echo "Hola!"
run:
     java myprogram

इस मामले में, make hiकमांड का उत्पादन करेगा, लेकिन make runआउटपुट नहीं करेगा।


1

आदेश के पूर्ववर्ती आदेश के प्रभाव को @अनुभाग पर एक अनुगामी बैकस्लैश का उपयोग करके कमांड को विस्तारित करके एक खंड तक बढ़ाया जा सकता है। यदि कोई .PHONYकमांड आउटपुट को दबाने के लिए वांछित है, तो एक सेक्शन शुरू कर सकता है:

@printf "..."
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.