Ваш make-файл будет перекомпилировать все каждый раз.
Вам не нужны первые четыре строки;make
знает, как создавать объектные файлы из исходного кода.Или, в качестве альтернативы, вам нужно изменить эти 4 строки на 2, поставить их в конце и изменить имена целей:
guess: yesno.o guess.o
g++ -o guess yesno.o guess.o
guess.o: yesno.h
yesno.o: yesno.h
Первая цель - это та, которая построена по умолчанию, так чтогарантирует, что guess
(программа) собрана.В командной строке пропускается -DDEBUG
, так как это влияет только на компиляцию исходного кода, и в этой строке нет источника (хотя, если использовать макросы, как в расширенном makefile
, я подойдет с такими параметрами, как-DDEBUG
появляется в строке ссылки).
Третья строка говорит, что guess.o
зависит от yesno.h
;это предположение (с моей стороны).Программа make
уже знает, как конвертировать guess.cpp
в guess.o
;ему просто нужна дополнительная информация, что он также использует заголовок yesno.h
.(Если нет, как он узнает о функциях, определенных в yesno.cpp
?)
В последней строке указано, что yesno.o
зависит от yesno.h
;опять же, make
знает, как скомпилировать yesno.cpp
в yesno.o
, но нуждается в дополнительной информации о заголовке.
Это должно перекомпилировать guess.o
, только когда guess.cpp
изменяется;он должен перекомпилировать yesno.o
только при изменении yesno.cpp
;он должен перекомпилировать оба объектных файла при изменении yesno.h
.Если какой-либо из исходных файлов изменится, программа будет перекомпонована;если исходные файлы не изменяются, то команда make
не должна ничего делать (или просто сообщать, что делать нечего).