В ответ на комментарий, еще несколько советов:
1) Убрать некоторую избыточность
Эта часть очень повторяется:
displayinit.o : displayinit.cpp displayinit.h
$(CC) $(LIBS) $(INCLUDEPATH) -c displayinit.cpp && mv displayinit.o $(OBJ)displayinit.o
initializer.o : initializer.cpp initializer.h
$(CC) $(LIBS) $(INCLUDEPATH) -c initializer.cpp $(OBJ)
algorithms.o : algorithms.cpp algorithms.h
$(CC) -c algorithms.cpp $(OBJ)
# ...
Вы можете заменить его на две части:
1) более общее правило, что-то вроде:
%.o: %.cpp
$(CC) -c $(LIBS) $(INCLUDEPATH) $< -o $@
$<
и $@
являются автоматическими переменными , $@
расширяется до имени созданной в данный момент цели, а $<
является первой зависимостью ($^
будет "всеми зависимостями") Есть и другие варианты - см. Руководство по эксплуатации ).
2) любые дополнительные команды (то есть заголовки):
displayinit.o: displayinit.h
matrix3f.o: matrix3f.h
main.o: main.h window.h displayinit.h
#etc
Примечание. Для каждого файла .o
его зависимости должны содержать:
-
.cpp
, из которого она построена (зависимость от общего правила),
- все
.h
файлы, включенные из этих .cpp
файлов (которые необходимо добавить позже).
Обратите внимание, что вы пропустили последнюю часть в вашем исходном make-файле. Это может вызвать у вас некоторые проблемы.
2) Генерировать deps автоматически
Как правило, каждый раз, когда вы добавляете #include
в любой из ваших файлов, вам нужно будет изменить ваш make-файл, чтобы отразить новую зависимость между файлами .cpp
/ .o
и .h
. Это очень хлопотно, но, к счастью, для этого есть автоматизированные решения. Здесь есть два подхода к C / C ++:
- Используйте свой компилятор для генерации зависимостей для вас (например,
gcc
/ g++ -MM
).
- Используйте дополнительный инструмент, такой как
makedepend
.
В любом случае, вам нужно динамически включать этот набор зависимостей в make-файл. Это требует некоторой хитрости, но если она у вас есть, вам никогда не придется беспокоиться о зависимостях. Если у вас есть Google для «зависимостей make-файлов C ++», ресурсов должно быть много.
Вот конкретный документ о Make.