Ваша проблема в том, что вы используете препроцессор C / C ++ #include
в make-файле.Make-файлы не являются кодом C / C ++.
В make-файле #
вводит строку комментария, поэтому остальная часть строки игнорируется.
Кроме того, make не делает ничего особенногос кавычками, поэтому вы не должны использовать их в не-рецептурных частях make-файлов (вы, конечно, должны использовать их там, где это необходимо, в рецептах, которые передаются в оболочку, потому что оболочка делает специальные операции с кавычками).
Изменить:
#include "makefile.vars"
на:
include makefile.vars
ETA
Ваша следующая проблема - неправильное использованиепеременные, поэтому make не может создать цепочку зависимостей.Рассмотрим эти правила:
$(Bin)Main: $(Objects)Add.o ...
...
$(Assembly)Add.s: $(Source)Add.cpp
...
$(Assembly)Add.o: $(Source)Add.s
...
Первое правило говорит, что make может создавать $(Bin)Main
из $(Objects)Add.o
.Второй говорит, что make может создать $(Assembly)Add.s
из $(Source)Add.cpp
.Последнее правило говорит, что make может создавать $(Assembly)Add.o
из $(Source)Add.s
.
Ни одно из этих правил не говорит make, как создавать $(Objects)Add.o
(при условии, что переменные Objects
и Assembly
не имеютто же значение).
И если вы это исправите, то получите ошибку, потому что ни одно из ваших правил не говорит make, как построить $(Source)Add.s
, что является обязательным условием Add.o
.
Вам нужно использовать одни и те же переменные для одной цели во всех местах;окончательное правило должно быть:
$(Objects)Add.o: $(Assembly)Add.s
...
ETA2
Также ваши правила неверны: вы используете -o $(Source)Add.cpp
, поэтому вы просите компилятор сгенерировать вывод, который перезапишет ваш исходный файл.Я надеюсь, что вы увидите это редактирование прежде, чем исправите свой make-файл достаточно, чтобы удалить весь ваш код.
ETA3
Ваши make-файлы будут намного проще и на много менее подвержен ошибкам (и намного легче исправлять ошибки), если вы используете шаблонные правила вместо дублирования всего текста снова и снова;удалите ВСЕ ваши правила для сборки сборочных и объектных файлов и добавьте эти два правила шаблона:
(Assembly)%.s: $(Source)%.cpp
$(GCC) $(DEBUG) $(GCC_FLAGS) $(INCLUDES) -S -o $@ $<
$(Objects)%.o: $(Assembly)%.s
$(GCC) $(DEBUG) $(GCC_FLAGS) $(INCLUDES) -c -o $@ $<