Makefile entfernen ../ Pfad

Habe ich Objekt-Dateien kommen in mit Pfade, die könnte wie folgt Aussehen:

 '../../src/foo/bar.c'

Möchte ich Ihnen ausgegeben werden, um

 'build/src/foo/bar.o'

Derzeit mit:

 COBJS      :=  $(notdir $(CFILES))
 COBJS      :=  $(patsubst %,$(BUILD)%.o,$(COBJS))

Kann ich erreichen

 'build/bar.o'

Dies ist problematisch, wenn zwei beliebige Bibliothek/Projekt enthält den gleichen Klassennamen.

Die Frage ist also, wie kann man das entfernen mehrerer '../' von einem Pfad in Machen. Ich habe versucht, die offensichtliche und naive Ansätze mit keine Ergebnisse.

Update, das folgende match genau ../../und ersetzen Sie es mit dem rest. Das ist perfekt, außer, dass es speziell für ../../. Müssen nur, es zu machen, eine beliebige Anzahl von ../../

 COBJS      :=  $(CFILES:../../%=%)

Update,

GELÖST, nur drei Ruf scheuen die Veröffentlichung meiner eigenen Antwort.

 COBJS      :=  $(subst ../,,$(CFILES))
  • Was ist falsch mit COBJS := $(subst ../.., build, $(CFILES))?
  • Einige Dateien sind nicht immer zwei relative Pfade rückwärts.
InformationsquelleAutor Halsafar | 2012-03-16
Schreibe einen Kommentar