2011-06-29 14 views
27

¿Cómo puedo hacer esto? Él los errores hacia fuera con "make: somevariable: command not found"No se puede asignar la variable dentro de la receta

sometarget: 
    somevariable = somevalue 

ejemplo completo:

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 
+0

¿Has encontrado una solución mejor? –

+1

Vea también http://stackoverflow.com/questions/1909188/define-make-variable-at-rule-execution-time – Alexey

+0

Pritesh: Ahora uso el sistema de construcción tup para todos mis proyectos c/C++. http://gittup.org/tup/ – Blub

Respuesta

52

he encontrado una solución:

$(eval variablename=whatever) 

Esto funciona :)

(aunque ahora puede tratar de encontrar un sistema de construcción más fácil;))

Gracias a todos por leer y también de ¡curso @eriktous para escribir!

3

Si se escribe como lo hizo, la asignación se ejecutará como un comando shell, lo que da el error que tienes

Me gustaría probar la organización que algo como esto:

 
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 

Esto debería hacer lo que quiera, aunque no estoy muy contento con el uso de la construcción ifneq dos veces. Tendría que pensar más para encontrar algo que evite eso.

Cuestiones relacionadas