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!

InformationsquelleAutor x-x | 2010-07-08
Schreibe einen Kommentar