Допустим, у меня есть файлы:
Libs:
- one.cpp, one.h
- two.cpp, two.h
- three.cpp, three.h
Программа:
Есть ли способ создать Makefile, который будеткомпилировать только тот * .cpp, который был изменен из последней компиляции?
В настоящее время у меня есть что-то подобное:
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
Я отлично работаю, но когда я компилирую свою программу, а затем меняю два.cpp or 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