У вас две проблемы с командной строкой gcc
. Во-первых, вы указываете флаг -S
, который заставляет gcc выдавать ассемблерный код, а не объектный код. Во-вторых, вам не хватает флага -c
, который говорит gcc скомпилировать файл в объектный файл, но не связывать его. Если вы просто удалите -S
и ничего не измените, вы получите исполняемую программу с именем file1.o
и другую с именем file2.o
вместо двух объектных файлов.
Помимо этих ошибок, вы можете упростить ваш make-файл с помощью шаблонных правил. Я предлагаю вам попробовать следующее:
all: exFile
exFile: file1.o file2.o
gcc -Wall -g -m32 $^ -o $@
%.o: %.c
gcc -Wall -g -m32 -c $< -o $@
file1.o: file1.h
Или, как указывает EmployedRussian, вы можете пойти с чем-то еще более минимальным, которое использует больше встроенных функций GNU:
CC=gcc
CFLAGS=-Wall -g -m32
all: exFile
exFile: file1.o file2.o
$(LINK.c) $^ -o $@
file1.o: file1.h