web-dev-qa-db-fra.com

Impossible d'attribuer une variable à l'intérieur de la recette

Comment faire pour que ça marche? Il génère une erreur avec "make: somevariable: Command not found"

sometarget:
    somevariable = somevalue

Exemple complet:

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
35
Blub

J'ai trouvé une solution en utilisant la fonction eval :

$(eval variablename=whatever)

Cela marche :)

(même si je peux maintenant essayer de trouver un système de construction plus facile;))

Merci à tous pour la lecture et bien sûr @eriktous pour l'écriture!

66
Blub

Si vous l'écrivez comme vous l'avez fait, l'affectation sera exécutée comme une commande Shell, ce qui donne l'erreur que vous avez obtenue.

J'essaierais de l'organiser quelque chose comme ceci:

 CXXFLAGS = -I/usr/include/test 
 Ifneq ($ (argsexec), true) 
 CXXFLAGS + = -shared -fPIC 
 DESTDIR =/home /pc[.____. diplomatiqueendif[.____. diplomatique.____. E5EOBJ = main.o Server.o 
 
 blabla: $ (OBJ) 
 $ (CXX ) -o blabla $ (OBJ) $ (CXXFLAGS) 
 ifneq ($ (argsexec), true) 
 ./bn.sh[.____.

Cela devrait faire ce que vous voulez, bien que je ne sois pas très content d'utiliser deux fois la construction ifneq. Il faudrait que je réfléchisse davantage pour trouver quelque chose qui évite cela.

4
eriktous