Я хочу использовать один файл make для создания проекта в нескольких режимах, а затем каждый режим в режиме "нормальный" и "отлаживать", то есть:
У меня есть следующие файлы (более того, в действительности, но это будет показывать мою точку зрения):
И я хочу иметь возможность использовать мой 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 $@
Как вы, вероятно, можете сказать, я не эксперт, поэтому любая помощь/идеи были бы оценены.
Удалите -g
из CFLAGS
и LDFLAGS
и добавьте следующий PHONY
:
.PHONY: x86_debug
x86_debug: CFLAGS += -g
x86_debug: LDFLAGS += -g
x86_debug: $(X86_OUTPUT)
Скомпилировать в обычном режиме: make
. Для компиляции в режиме отладки: make x86_debug
Это может не делать то, что вы ожидаете, но легко изменить
cmake
такие инструменты, как cmake
Processor_x86_debug.o
) или по каталогам (bin/x86/debug/Processor.o
) или в какой-либо комбинации (bin/x86/Processor_debug.o
)? А как насчет разных исполняемых файлов?