Mit sed in ein makefile; wie die Flucht Variablen?
Schreibe ich ein generisches makefile zum erstellen von statischen Bibliotheken. Es scheint zu funktionieren gut so weit, außer für die Zeile den Aufruf sed:
# Generic makefile to build a static library
ARCH = linux
CFLAGS = -O3 -Wall
SOURCES = src
BUILD_DIR = build/$(ARCH)
TARGET = $(BUILD_DIR)/libz.a
CFILES = $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.c))
OBJECTS = $(addprefix $(BUILD_DIR)/,$(CFILES:.c=.o))
# Pull in the dependencies if they exist
# http://scottmcpeak.com/autodepend/autodepend.html
-include $(OBJECTS:.o=.dep)
default: create-dirs $(TARGET)
$(TARGET): $(OBJECTS)
$(AR) -rc $(TARGET) $^
$(BUILD_DIR)/%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
$(CC) -M $(CFLAGS) $*.c > $(BUILD_DIR)/$*.tmp
sed s/.*:/$(BUILD_DIR)\\/$*.o:/$(BUILD_DIR)/$*.tmp > $(BUILD_DIR)/$*.dep
@rm $(BUILD_DIR)/$*.tmp
.PHONY: create-dirs
create-dirs:
@for p in $(SOURCES); do mkdir -p $(BUILD_DIR)/$$p; done
.PHONY: clean
clean:
rm -fr $(BUILD_DIR)
sed wird verwendet, um zu ersetzen Sie den Pfad/Namen der Objekt-Datei mit dem vollständigen Pfad, wo das Objekt eigentlich ist. z.B. 'src/foo.o:' wird ersetzt mit 'build/linux/src/foo/.o:' in diesem Beispiel.
$(BUILD_DIR) und $* in der Ersatz-Zeichenfolge enthalten Schrägstriche, wenn ausgebaut - wie übertrage ich diese zur sed?
Hinweis: Dies haben könnte, wurde beantwortet vor, aber ich bin bisher nicht die Antworten auf meine spezifischen problem!
Du musst angemeldet sein, um einen Kommentar abzugeben.
sed s~foo~bar~g
"
(zumindest in der shell), und den Variablen, die noch erweitert werden:echo "Hello $PLANET"
sed s~${PLANET}~bar~
? Für einige Grund, dass nicht erweitern Sie in der Datei MakefileWenn Sie möchten, dass der Pfad erweitern Sie in eine Datei, die Sie verwenden
Wenn die variable PATH_VARIABLE sah aus wie /opt/Pfad/user/home/etc
es wird nun aufgeblasen zu:
Diese soll ermöglichen, sed einfügen ' /' richtig.
-Matt
$(subst, /,\/,${PATH_VARIABLE})
ich denke, es sollte$(subst /,\/,${PATH_VARIABLE})
. Das heißt, es gibt ein zusätzliches Komma nach "subst".$(subst /,\/,$(PATH_VARIABLE))
vorausgesetztPATH_VARIABLE
wurde eine variable?