43 Stimmen

Variable kann innerhalb eines Rezepts nicht zugewiesen werden

Wie kann ich das schaffen? Es kommt die Fehlermeldung "make: somevariable: Befehl nicht gefunden"

sometarget:
    somevariable = somevalue

Vollständiges Beispiel:

CXXFLAGS = -I/usr/include/test -shared -fPIC

OBJ = main.o Server.o

blabla : $(OBJ) 
ifeq ($(argsexec),true) 
    # Creates an executable
    CXXFLAGS = -I/usr/include/test
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
else 
    # Creates a library
    DESTDIR = /home/pc
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
    ./bn.sh
endif

83voto

Blub Punkte 12306

Ich habe eine Lösung gefunden mit die eval Funktion :

$(eval variablename=whatever)

Das funktioniert :)

(obwohl ich jetzt vielleicht versuchen werde, ein einfacheres Build-System zu finden ;))

Danke an alle fürs Lesen und natürlich auch an @eriktous fürs Schreiben!

4voto

eriktous Punkte 6419

Wenn Sie es so schreiben, wie Sie es getan haben, wird die Zuweisung als Shell-Befehl ausgeführt, was zu dem Fehler führt, den Sie erhalten haben.

Ich würde versuchen, es in etwa so zu organisieren:

CXXFLAGS = -I/usr/include/test
ifneq ($(argsexec),true) 
  CXXFLAGS += -shared -fPIC
  DESTDIR = /home/pc
endif

OBJ = main.o Server.o

blabla : $(OBJ) 
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
ifneq ($(argsexec),true) 
    ./bn.sh
endif

Dies sollte das tun, was Sie wollen, obwohl ich nicht ganz glücklich bin mit der Verwendung der ifneq zweimal konstruieren. Ich müsste mehr nachdenken, um etwas zu finden, das das vermeidet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X