Первая проблема: неправильная скобка или две.
$(A_OBJFILES): ($A_SRCFILES)
Обратите внимание, что у вас есть $
внутри (
в ($A_SRCFILES)
. Make расширяется $A
, что ничто, и дела идут вниз. Я думаю, что вы имели в виду $(A_SRCFILES)
, и то же самое в другом правиле.
Вторая проблема: я не знаю синтаксис ассемблера, но синтаксис команды компилятора неверен:
$(CC) $(CFLAGS) -c -o $@ $*
Переменная $*
- ничто, если мы не в шаблонном правиле, которым мы не являемся (пока). И вообще, если бы мы были в шаблонном правиле и вы пытались собрать foo.o
, эта команда искала бы исходный файл foo
, и такого файла нет. Сделайте это так:
$(CC) $(CFLAGS) -c -o $@ $<
Третья проблема: каждый объектный файл зависит от всех исходных файлов (в каждом правиле). Попробуйте вместо этого:
$(A_OBJFILES): %.o : %.asm
...
$(C_OBJFILES): %.o : %.c
...
( Теперь это шаблонное правило.)
Четвертая проблема: много избыточности в последнем правиле. Измените это на это:
all: $(A_OBJFILES) $(C_OBJFILES)
$(LD) $(LDFLAGS) $^ -o $(TARGET_OUTPUT)
или еще лучше:
all: $(TARGET_OUTPUT)
$(TARGET_OUTPUT): $(A_OBJFILES) $(C_OBJFILES)
$(LD) $(LDFLAGS) $^ -o $@