Если вы хотите показать полный вывод, включая строки компиляции для ваших объектных файлов, тогда будет ясно, что флаги вашего компилятора не используются для компиляции вашего исходного кода.В результате генерируемые объектные файлы предназначены для вашей собственной операционной системы, которая, скорее всего, является 64-битной, если вам требуется 32-битная.
Причина этого в том, как я описал выше: ваше шаблонное правило неверно.Вы написали %o : %.cpp
, когда хотели написать %.o : %.cpp
.Написанное вами правило шаблона говорит make, что если он хочет построить файл loader.o
(поэтому основа шаблона %o
соответствует loader.
), он может сделать это, скомпилировав файл loader..cpp
(потому что шаблонсимвол %
в %.cpp
заменяется знаком loader.
).Поскольку файла loader..cpp
нет, ваш шаблон отбрасывается как несоответствующий, и make продолжает поиск другого шаблона и находит его, как встроенное правило.
Но так как вы используете нестандартную переменнуюимена GPPPARAM
вместо стандартных CXXFLAGS
, ни один из ваших флагов не используется правилом по умолчанию.
У вас есть два варианта: вы можете либо исправить свои правила шаблона, чтобы они были правильными:
%.o: %.cpp
g++ $(GPPPARAM) -o $@ -c $<
%.o: %.s
as $(ASPARAMS) -o $@ $<
Или вы можете избавиться от своих собственных правил шаблона и использовать встроенные правила make, а также установить стандартные переменные, чтобы гарантировать использование ваших опций:
CXX := g++
CXXFLAGS := -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exception -fno-leading-underscore
AS := as
ASFLAGS := --32