Несколько режимов компиляции в make-файле

0

Я хочу использовать один файл make для создания проекта в нескольких режимах, а затем каждый режим в режиме "нормальный" и "отлаживать", то есть:

У меня есть следующие файлы (более того, в действительности, но это будет показывать мою точку зрения):

  • ядро/ядро /main.cpp
  • ядро/процессор/Processor.cpp
  • ядро/процессор/x86/Processor.cpp
  • ядро/процессор/x86_common/Processor.cpp
  • ядро/процессор/x64/Processor.cpp

И я хочу иметь возможность использовать мой make файл следующими способами:

make x86
  (compiles all files except "kernel/processor/x64/Processor.cpp")
  (enables the pre-processor directives X86 & X86_COMMON)

А также,

make x86debug
  (compiles all files except "kernel/processor/x64/Processor.cpp")
  (enables the pre-processor directives X86 & X86_COMMON & DEBUG)
  (puts "-g -ggdb" infront of all gcc/g++/as arguments)

И так далее.

В настоящее время у меня есть следующий make файл, который, хотя он работает, только позволяет мне скомпилировать в режиме отладки x86, и теперь, когда я переношу свое программное обеспечение на другие платформы, я хочу указать, какой режим для сборки.

CC = i586-elf-g++
CFLAGS = -g -ggdb -ffreestanding -Wall -Wextra -fno-exceptions -fno-rtti -std=gnu++11 -Isrc/system/include -DX86 -DX86_COMMON
LD = i586-elf-gcc
LDFLAGS = -g -ggdb -ffreestanding -O2 -nostdlib -lgcc
AS = i586-elf-as
ASFLAGS = -g -ggdb 

OBJECTS = src/system/kernel/core/main.o
ALL_OBJECTS = $(OBJECTS) $(X86_OBJECTS)

X86COMMON_OBJECTS   = src/system/kernel/core/processor/x86_common/Processor.o

X86_OBJECTS = $(X86COMMON_OBJECTS) src/system/kernel/core/processor/x86/boot.o
X86_LINKER  = src/system/kernel/core/processor/x86/link.ld
X86_OUTPUT  = bin/kernel_x86.bin

.PHONY: clean
clean: $(ALL_OBJECTS)
    rm $(ALL_OBJECTS)

.PHONY: all
all: $(X86_OUTPUT)

$(X86_OUTPUT): $(X86_LINKER) $(OBJECTS) $(X86_OBJECTS)
    $(LD) $(LDFLAGS) -T $(X86_LINKER) $^ -o $@

%.o: %.cpp
    $(CC) $(CFLAGS) -c $< -o $@

%.o: %.asm
    $(AS) $(ASFLAGS) $< -o $@

Как вы, вероятно, можете сказать, я не эксперт, поэтому любая помощь/идеи были бы оценены.

  • 0
    Вы хотите сохранить специфичные для режима объектные файлы для последующего использования? Вы хотите разделить их по имени файла ( Processor_x86_debug.o ) или по каталогам ( bin/x86/debug/Processor.o ) или в какой-либо комбинации ( bin/x86/Processor_debug.o )? А как насчет разных исполняемых файлов?
  • 0
    Они разделены по каталогам, и мне нужно сохранить файлы .o, поскольку они запускаются с помощью специального инструмента для генерации дополнительной информации и данных об отражении.
Теги:
makefile
gnu-make

1 ответ

1
Лучший ответ

Удалите -g из CFLAGS и LDFLAGS и добавьте следующий PHONY:

.PHONY: x86_debug
x86_debug: CFLAGS += -g
x86_debug: LDFLAGS += -g
x86_debug: $(X86_OUTPUT)

Скомпилировать в обычном режиме: make. Для компиляции в режиме отладки: make x86_debug

Это может не делать то, что вы ожидаете, но легко изменить

  • 0
    Это работает очень хорошо! Благодарю за ваш ответ
  • 0
    @Mattiemus Добро пожаловать. Я тоже боролся с Makefile :) Когда ваш Makefile становится действительно сложным, вы можете cmake такие инструменты, как cmake

Ещё вопросы

Сообщество Overcoder
Наверх
Меню