2010-07-24 24 views
10

No estoy seguro de si es gmake o gcc que no entiendo aquí.hacer eliminar archivos de dependencia

Estoy usando las opciones -MM y -MD para generar reglas de dependencia para el marco de pruebas de unidad que estoy usando. Específicamente:

$(TEST_OBJ_DIR)/%.d: $(TEST_SRC_DIR)/%.cpp 
    @$(CPPC) -MM -MD $< -o [email protected] 
    @sed -i -e 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(TEST_OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1.o:|' [email protected] 

-include $(TEST_DEP_FILES) 

Cuando corro make, después de todos los binarios están vinculados (correctamente), que veo que la siguiente línea adicional (inexplicable) antes de que haga salidas

rm test/obj/dice.d test/obj/regex.o test/obj/inventoryContainer.d test/obj/color-string.d test/obj/dice.o test/obj/inventoryContainer.o test/obj/color-string.o test/obj/regex.d 

De dónde es que rm comando que viene? El único lugar - en cualquier lugar - que tengo un comando rm en mi makefile está en la directiva limpia

test-clean: 
    rm -f $(TEST_BIN_FILES) 
    rm -f $(TEST_OBJ_DIR)/*.{a,d,o} 

¿Alguna idea?

Respuesta

10

make creará automáticamente intermediate files si es necesario para encadenar dos reglas juntas, pero las eliminará al final de la compilación. Puede utilizar el objetivo especial .PRECIOUS para evitar que la eliminación de ellos

+1

O .SECONDARIO ... – reinierpost

+0

@rei Ah, sí. Sabía que '.SECONDARY' forzaba a tratar los archivos como intermedios, pero no me di cuenta de que también dejaba de eliminarlos –

0

Una de las opciones de ayuda para depurar este tipo de problemas es la opción -n:

make -n {TARGET} 

Se le mostrará los comandos que iría, pero ganó en realidad los ejecutan. Esto le permite ver qué reglas se activan, pero no le proporciona todos los resultados adicionales que dificultan el diagnóstico del problema.

La marca de depuración -d también puede ser útil, pero asegúrese de ejecutarla en un contexto donde pueda desplazarse fácilmente, obtendrá una gran cantidad de resultados. Usualmente uso el modo de shell de emacs ya que tiene una buena funcionalidad de búsqueda y guarda el búfer.

Cuestiones relacionadas