Cómo definir reglas en el Makefile para compilar solo los archivos * .cpp que se modificaron (y sus dependencias), no todos los archivos * .cpp
Digamos que tengo archivos:
Libs:
one.cpp, one.htwo.cpp, two.hthree.cpp, three.hPrograma:
program.cpp¿Hay alguna forma de crear Makefile que compile solo ese * .cpp que se modificó desde la última compilación?
Actualmente tengo algo así:
SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS) program
.cpp.o:
g++ -Wall -c SRCS = one.cpp two.cpp three.cpp
OBJS = $(SRCS:.cpp=.o)
all: $(OBJS) program
.cpp.o:
g++ -Wall -c $<
program:
g++ -Wall $(OBJS) program.cpp -o program
clean:
rm -f $(OBJS) program
lt;
program:
g++ -Wall $(OBJS) program.cpp -o program
clean:
rm -f $(OBJS) program
Funciono bien, pero cuando compilo mi programa y luego cambio two.cpp o two.h primero necesito ejecutar "make clean", porque cuando ejecuto "make" en segundo lugar obtengo:
Nothing to be done for 'all'.
Me gustaría cambiar mi Makefile de esa manera, reconocería mis cambios y volvería a compilar ese archivo y sus dependencias (si one.cpp usa el código de two.cpp que se modificó, ambos archivos deberían volver a compilarse).
Entonces, si modifico two.cpp, make debería hacer:
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
Pero si one.cpp usa el código de two.cpp que fue modificado, haga que shold haga:
g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program