2013-10-18 28 views
5

खोने GNU manual के अनुसार बिना एक Makefile चर में एक फ़ाइल सामग्री निर्दिष्ट करने के लिए:गाड़ी-रिटर्न

यह एक अंतरिक्ष के लिए प्रत्येक नई पंक्ति या गाड़ी-रिटर्न/न्यू लाइन जोड़ी बदल देता है। यह परिणाम में आखिरी चीज है, अगर यह पीछे की ओर (कैरिज-रिटर्न और) न्यूलाइन को हटा देता है।

लेकिन यह गाड़ी-रिटर्न के बिना awk उपयोग करने के लिए और अधिक कठिन बना देता है:

FILE = $(shell cat $(PATH)) 
TEXT = $(shell echo "$(FILE)" | awk '/Text/ {print $$3}') 

तो मेरे सवाल है जब एक Makefile चर करने के लिए फ़ाइल सामग्री निर्दिष्ट गाड़ी-रिटर्न रखने के लिए एक तरीका है कि क्या वहाँ है, या कोई स्मार्ट कामकाज?

उत्तर

2

नहीं, आप $(shell ...) फ़ंक्शन के परिणामों में न्यूलाइन को संरक्षित नहीं कर सकते हैं।

आप निश्चित रूप से इस तरह अपने makefile बदल सकते हैं:

FILE = $(PATH) 
TEXT = $(shell cat $(FILE) | awk '/Text/ {print $$3}') 

या, UUOC से बचने के लिए,

TEXT = $(shell awk '/Text/ {print $$3}' < $(FILE)) 
0

यहाँ एक फ़ाइल और आयात से कुछ लाइनों को निकालने के लिए awk का उपयोग करने के लिए एक रास्ता है न्यूलाइन को संरक्षित करते समय उन्हें मेकफ़ाइल पर।

LOCAL_INO_SRCS ?= $(wildcard *.ino) 
t = $(shell t=$$(mktemp);echo $$t;awk '/^\#if 0 .. MAKEFILE{/{f=1;next}/^\#endif .. MAKEFILE}/{f=0}f' $(LOCAL_INO_SRCS) >$$t) 
include $t 
$(shell rm $t) 

और, यहाँ कुछ का एक उदाहरण आप स्रोत फ़ाइल से आयात कर सकते हैं:

#if 0 // MAKEFILE{ 

BOARD_TAG = attiny85 

# usbtiny hack 
MONITOR_PORT = usb 
FORCE_MONITOR_PORT = define 

#endif // MAKEFILE}