shell - sed in makefile, usage -


मैं मेकफाइल सृजन सीखने की प्रक्रिया में हूं।

वर्तमान लक्ष्य को $ (SOURCEDIR) के लिए । C फ़ाइलें और / path / file के प्रारूप में .c फ़ाइल पथ के उस लिज़ के अनुसार C ) एक अच्छा $ (VPATH) है, इसलिए मुझे रिकर्सिव मेकफाइल (एक में उर्फ ​​दर्द) का उपयोग करने की आवश्यकता नहीं है।

एटीएम यह, जहां $ (SOURCETREE) पर खाली होगा $ (ECHO)

  स्रोत: = $ (shell find $ (SOURCEDIR) -नाम '* .c') स्रोत: $ $ ($ $ (स्रोत)) स्रोत: = $ (शैल $ (ईसीएचओ) $ (सोर्सिटी) | $ (एसईडी) -ए "एस / [[: स्पेस:]] / \ N / g "| यूनीक | $ (एसईडी) -e" / \ n / [[अंतरिक्ष:]] / जी ");  

हो सकता है कि मुझे अभी भी अंक न मिलें (देर से हुई: /)

किसी भी मदद के लिए धन्यवाद।

नोट: एक बैश में शेल यह मेरे लिनक्स वर्कबॉक्स पर पूरी तरह से कार्य करता है (मैं इनवेरिबिलल्स को तदनुसार बदलता हूं) नोट: मैं कोई समर्थक नहीं हूं, इसलिए कृपया बताएं कि क्या आप sed के साथ जादू करते हैं, धन्यवाद

टिप्पणियां:

  1. बैकल्टी निकालें वे अनावश्यक हैं; $ (शेल) फ़ंक्शन पहले से ही कमांड के आउटपुट को कैप्चर करता है।

  2. echo / sed / uniq / sed श्रृंखला को एलएस / यूनिक द्वारा बदला जा सकता है ls प्रति पंक्ति एक फ़ाइल नाम मुद्रित करेगा, इसलिए प्रतिस्थापित और पूर्ववत गीत और नृत्य की कोई आवश्यकता नहीं है।

  3. ऐसा लगता है कि आप खो रहे हैं $ (dir) से परिणाम क्योंकि आप $ (सोर्सस) की बजाय $ (SOURCETREE) तीसरे असाइनमेंट में उपयोग करते हैं।

परिणाम:

  स्रोत: = $ (शैल $ $ $ (एसओआरसीआरआईडीआईआर) -नाम '* .c') स्रोत: स्रोत)) सोर्सिट्री: = $ (शेल एलएस $ (सोर्सिटी) | यूनिक);  

दरअसल, यहां तक ​​कि इस छोटे शॉल आवंटन अनावश्यक है। यह नामों की सूची को सॉर्ट करेगा और डुप्लिकेट को हटा देगा। बनाने के दस्तावेज़ से: "संयोग से, क्योंकि सॉर्ट दोहरे शब्दों को हटा देता है, आप इसे इस उद्देश्य के लिए उपयोग कर सकते हैं भले ही आप सॉर्ट ऑर्डर के बारे में परवाह न करें।"

  स्रोत: = $ (shell find $ (SOURCEDIR) -नाम '* .c') स्रोत: $ $ (सॉर्ट करें $ (डायर $ (सोर्सस)))  

Comments