2016-05-28 14 views
0

Da ich gerade an meinem Makefile arbeite, stieß ich auf ein anderes Problem. Ich verwende diese Regel als Teil meines Erstellungsprozesses, der .mid-Dateien in .s-Dateien umwandelt.Makefile extrahieren Teil des Dateipfads als Compilerflag

$(MIDAS): $(BLDPATH)/%.s: %.mid 
$(shell mkdir -p $(dir [email protected])) 
#test $($< | sed "*") 
$(MID2AGB) $(MIDFLAGS) -G$($< | sed ".*mus/vcg([0-9]{3})/.*\.mid") $< [email protected] 

Alle .mid Eingabedateien folgen demselben Format:. mus/vcg [0-9] {3} /. .mid, was bedeutet, dass sie in verschiedenen Verzeichnissen nach der Namenskonvention vcgXXX gespeichert sind, wobei X eine beliebige Zahl von 0-9 sein kann. (Vielleicht ist meine Regex dafür sogar falsch). Wenn ich $ (MID2AGB) aufruft, möchte ich ein Compiler-Flag -GXXX verwenden. Das XXX dieses Flags muss jedoch dem XXX aus dem Eingabedateipfad entsprechen.

Mein Makefile-Code funktioniert nicht. Irgendeine Idee, wie man dieses Problem behebt?

Antwort

1

Es ist eine grobe, aber effektive Art und Weise, dies mit Make Stringmanipulation zu tun:

# suppose the source is .mus/vcg456/Z.mid 

$(MIDAS): $(BLDPATH)/%.s: %.mid 
    @echo $*          # this gives .mus/vcg456/Z 
    @echo $(subst /, ,$*)      # this gives .mus vcg456 Z 
    @echo $(word 2,$(subst /, ,$*)    # this gives vcg456 
    @echo $(subst vcg,,$(word 2,$(subst /, ,$*)) # this gives 456 
Verwandte Themen