2016-11-04 5 views
1

Gibt es irgendeine GNU Make spezielle Variable, um zu wissen, welches Ziel vom Benutzer im Befehlszeilenaufruf gesendet wurde? Um das zu erreichen so etwas wie (es ist nur ein Beispiel):GNU Make: angefordertes Ziel

// makefile 
ifeq ($(USER_TARGET),"plain") 
CXXFLAGS += -O0 
else 
CXXFLAGS += -O3 
endif 

plain: 
    // do something using CXXFLAGS 

all: 
    // other rule using CXXFLAGS 

Es ist wichtig, dass die USER_TARGET Variable (die eine spezielle GNU variabel machen sein können, oder eine benutzerdefinierte Variable, den Wert durch eine spezielle GNU gesetzt wurde Make-Funktion das Benutzerziel), enthält das ursprüngliche Ziel spezifiziert durch den Benutzer in einem Anruf wie eine Rückkehr:

$ make plain 

und nicht den Wert in irgendeinem Schritt des Abhängigkeitsbaums. Mit anderen Worten, die USER_TARGET darf nicht während der Gebäudeabhängigkeit Kette ändern, denn wenn ich nicht falsch liege, wird der Wert USER_TARGET ausgewertet, wenn es zum ersten Mal verwendet wird, und dann kann in jedem Punkt des Dokuments passieren Ich möchte sichergehen, dass der aktuelle Schritt beim Aufbau der Kette den Wert USER_TARGET nicht ändert.

Ich weiß nicht, ob ich klar genug war oder ob es übertrieben war.

Wenn es in GNU Make keinen eingebauten Mechanismus dafür gibt, ist jeder beliebige $(shell command) Trick willkommen.

+1

Vielleicht würde dies für Sie arbeiten? [In einem Rezept kann keine Variable zugewiesen werden] (http://stackoverflow.com/questions/6519234/cant-assign-variable-inside-recipe). – lurker

+1

Ich bin nicht sicher, was Sie zu tun versuchen, aber ich sah vor kurzem ein Makefile mit 'debug: clean'' @make CFLAGS = '$ {DEBUG_CFLAGS}' ' – Random832

+1

Passen Sie einfach auf, mehrere Ziele angegeben werden könnten zB' make -f Makefile-Build-Test könnte verwendet werden, um Build- und Testziele aufzurufen – mjs

Antwort