Как определить правила в Makefile для компиляции только тех файлов * .cpp, которые были изменены (и их зависимостей), а не всех файлов * .cpp
Допустим, у меня есть файлы:
Libs:
one.cpp, one.htwo.cpp, two.hthree.cpp, three.hПрограмма:
program.cppЕсть ли способ создать Makefile, который будет компилировать только тот * .cpp, который был изменен после последней компиляции?
В настоящее время у меня есть что-то подобное:
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
Я отлично работаю, но когда я компилирую свою программу и затем меняю two.cpp или two.h, мне нужно сначала запустить «make clean», потому что когда я запускаю второй «make», я получаю:
Nothing to be done for 'all'.
Я хотел бы изменить свой Makefile таким образом, чтобы он распознавал мои изменения и перекомпилировал этот файл и его зависимости (если one.cpp использует код из файла two.cpp, который был изменен, оба файла должны быть перекомпилированы).
Так что, если я изменю two.cpp, make должен сделать:
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program
Но если one.cpp использует код из two.cpp, который был изменен, make shold do:
g++ -Wall -c one.cpp
g++ -Wall -c two.cpp
g++ -Wall $(OBJS) program.cpp -o program