Ich versuche in meinem aktuellen Projekt ein nicht-rekursives make build-System zu implementieren. Was ich damit zu tun habe, sind Variablenbereiche. Zielspezifische Variablen passen nicht zu meinen Bedürfnissen, da Variablen oft Ziele und keine Voraussetzungen definieren. Was ich brauche, ist:GNU machen. Variablen mit einem auf ein einzelnes Makefile begrenzten Umfang
Makefile1:
SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))
Makefile2:
#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here
Und die Ausgabe ich will, ist 'original_value'.
Gibt es irgendwelche Strategien, um es real zu machen?
EDIT: Die einzige Lösung, die ich für den Moment gekommen ist, mich zu zwingen und zu organisieren, am Ende jeden einzelnen Makefile aller inlcudes zu platzieren und sofort variable Zuordnung verwenden: =
Diese Lösung klingt ziemlich gut. Was stimmt damit nicht? Und was ist 'SOMEVAR', wofür wird es verwendet? – Beta
Die Sache, die ich in dieser Lösung nicht mag, ist, dass es sehr wackelig ist. Wenn irgendein armer Typ, der meinen Platz einnehmen wird, die Idee und den Ort nicht bekommen wird woanders, wird er Tonnen von Überraschungen bekommen. –
Wenn Makefile2 mehr als einmal enthalten ist, und es ein Rezept definiert, das auf '$ (SOMEVAR)' verweist , dann wird es fürchterlich zerbrechen --- Variablen innerhalb von Rezepten werden ausgewertet, wenn die Rezepte ausgeführt werden, was bedeutet, dass sie alle den letzten Wert von '$ (SOMEVAR)' sehen, nicht den Wert, den es hatte, als das Rezept definiert wurde. –