howto - makefile structure
Omitir la generaciĆ³n de dependencia de archivos para ciertos objetivos(por ejemplo, `limpiar`) (1)
Tengo varios proyectos C y C ++ que siguen una estructura básica que he estado usando desde hace un tiempo. Mis archivos fuente van en src/*.c
, archivos intermedios en obj/*.[do]
y el ejecutable real en el directorio de nivel superior.
Mis makefiles siguen aproximadamente esta plantilla:
# The final executable
TARGET := something
# Source files (without src/)
INPUTS := foo.c bar.c baz.c
# OBJECTS will contain: obj/foo.o obj/bar.o obj/baz.o
OBJECTS := $(INPUTS:%.cpp=obj/%.o)
# DEPFILES will contain: obj/foo.d obj/bar.d obj/baz.d
DEPFILES := $(OBJECTS:%.o=%.d)
all: $(TARGET)
obj/%.o: src/%.cpp
$(CC) $(CFLAGS) -c -o $@ $<
obj/%.d: src/%.cpp
$(CC) $(CFLAGS) -M -MF $@ -MT $(@:%.d=%.o) $<
$(TARGET): $(OBJECTS)
$(LD) $(LDFLAGS) -o $@ $(OBJECTS)
.PHONY: clean
clean:
-rm -f $(OBJECTS) $(DEPFILES) $(RPOFILES) $(TARGET)
-include $(DEPFILES)
Ahora estoy en el punto en que estoy empaquetando esto para un sistema Debian. Estoy utilizando debuild
para construir el paquete fuente de Debian, y pbuilder
para construir el paquete binario. El paso de debuild
solo tiene que ejecutar el objetivo clean
, pero incluso esto hace que los archivos de dependencia se generen e incluyan.
En resumen, mi pregunta es realmente: ¿puedo de alguna manera evitar que genere dependencias cuando todo lo que quiero es ejecutar el objetivo clean
?
La solución es fácil, no -include
archivos generados en limpio:
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPFILES)
endif