2012-08-14 10 views
14

Como parte del archivo MAKE, me gustaría producir una versión depurada o de lanzamiento del objetivo.Hacer advertencia de archivos, anulando los comandos para el destino

Funcionalmente, todo está funcionando, sin embargo, que estoy recibiendo advertencias cuando se ejecuta hacen

12 SRC := $(shell echo src/*.cpp) 
13 SRC += $(shell echo $(TEST_ROOT)/*.cpp) 
14 
15 D_OBJECTS = $(SRC:.cpp=.o)  # same objects will need to be built differently 
16 R_OBJECTS = $(SRC:.cpp=.o)  # same objects will need to be built differently 

22 all: $(TARGET) 
23 
25 $(TARGET): $(D_OBJECTS) 
26 $(CC) $(D_OBJECTS) -o $(TARGET) 
27 
28 $(D_OBJECTS) : %.o: %.cpp      # ----- run with debug flags 
29 $(CC) $(COMMON_FLAGS) $(DEBUG_FLAGS) -c $< -o [email protected] 
30 
31 release: $(R_OBJECTS) 
32 $(CC) $(R_OBJECTS) -o $(TARGET) 
33 
34 $(R_OBJECTS) : %.o: %.cpp      # ----- run with release flags 
35 $(CC) $(COMMON_FLAGS) $(RELEASE_FLAGS) -c $< -o [email protected] 

Cuando i make me sale versión de depuración, cuando me sale make release versión de lanzamiento.

Pero también recibo advertencias:

Makefile:35: warning: overriding commands for target `src/Timer.o' 
Makefile:29: warning: ignoring old commands for target `src/Timer.o' 
Makefile:35: warning: overriding commands for target `test/TimerTest.o' 
Makefile:29: warning: ignoring old commands for target `test/TimerTest.o' 

Con este 2 preguntas:

  1. Cualquier forma de ignorar las advertencias
  2. estoy haciendo las cosas bien? ¿Qué cambios son necesarios?

Respuesta

10

Una de las formas más comunes para hacer esto es colocar los objetos de liberación y los objetos de depuración en subdirectorios separados. De esta forma, no obtendrá redefiniciones para las reglas de un objeto, ya que tendrán diferentes nombres. Algo como esto:

D_OBJECTS=$(SRC:%.cpp=debug/%.o) 
R_OBJECTS=$(SRC:%.cpp=release/%.o) 

RTARGET = a.out 
DTARGET = a.out.debug 

all : dirs $(RTARGET) 

debug : dirs $(DTARGET) 

dirs : 
    @mkdir -p debug release 

debug/%.o : %.c 
    $(CC) $(DEBUG_CFLAGS) -o [email protected] -c $< 

release/%.o : %.c 
    $(CC) $(RELEASE_CFLAGS) -o [email protected] -c $< 

$(DTARGET) : $(D_OBJECTS) 
    $(CC) $(DEBUG_CFLAGS) -o [email protected] $(D_OBJECTS) 

$(RTARGET) : $(R_OBJECTS) 
    $(CC) $(RELEASE_CFLAGS) -o [email protected] $(R_OBJECTS) 
+1

¿Sabes cómo hacer eso en netbeans que genera automáticamente Makefile? –

+0

o cree una biblioteca si tiene el mismo código para varios binarios – baptx

Cuestiones relacionadas