2013-10-18 4 views
5

Nach GNU manual einen Dateiinhalt in ein Makefile-Variable zuweisen:Wie ohne Verlust Carriage-Returns

Es wandelt jedes Newline oder Wagenrücklauf/Newline Paar zu einem einzigen Raum. Es entfernt auch die abschließende Zeilenschaltung (Carriage-Return und), wenn es das letzte Ergebnis ist.

Aber es erschwert awk ohne Carriage-Returns zu verwenden:

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

Also meine Frage ist, ob es einen Weg gibt Carriage-Returns zu halten, wenn eine Datei Inhalt zu einem Makefile-Variablen zuweisen, oder irgendwelche intelligenten Workarounds?

Antwort

2

Nein, Sie können keine Zeilenumbrüche in den Ergebnissen der $(shell ...)-Funktion beibehalten.

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

Oder UUOC zu vermeiden,

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

Hier ist ein Weg, awk zu verwenden, um einige Zeilen aus einer Datei und Import zu extrahieren:

Sie können natürlich Ihre Make-Datei wie folgt ändern Sie in das Makefile und behalten dabei Zeilenumbrüche bei.

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) 

Und hier ist ein Beispiel für etwas, das Sie aus der Quelldatei importieren:

#if 0 // MAKEFILE{ 

BOARD_TAG = attiny85 

# usbtiny hack 
MONITOR_PORT = usb 
FORCE_MONITOR_PORT = define 

#endif // MAKEFILE} 
Verwandte Themen