【发布时间】:2018-03-21 15:46:09
【问题描述】:
我正在编写一个简单的内核,到目前为止一切顺利。
我正在使用 Makefile 通过 shell 构建系统。
但是,我希望移动和重组文件结构,但是我的 makefile 使用绝对链接。
如何重构它以将所有 .cpp/.c 文件和 .s 文件编译到 out 文件夹并链接它们,而无需定义每个文件夹路径?
CC = ~/opt/cross/bin/i386-elf-g++
AS = ~/opt/cross/bin/i386-elf-as
LNFLAGS = -T linker.ld -melf_i386
CCFLAGS = -c -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions
ASFLAGS = -c
CTMP = $(wildcard src/kernel/*.cpp)
ATMP = $(wildcard src/kernel/arch/i386/*.s)
CFILE = $(subst src/kernel/, ,$(CTMP))
AFILE = $(subst src/kernel/arch/i386/, ,$(ATMP))
CSRC = $(CFILE:.c=)
ASRC = $(AFILE:.s=)
OUT = $(wildcard out/*.o)
all: ccompile acompile link
ccompile:
for file in $(CSRC) ; do \
$(CC) $(CCFLAGS) src/kernel/$$file -o out/$$file.o ; \
done
acompile:
for file in $(ASRC) ; do \
$(AS) $(ASFLAGS) src/kernel/arch/i386/$$file.s -o out/$$file.o ; \
done
link:
ld $(LNFLAGS) -o latest.bin $(OUT)
【问题讨论】:
-
也许,你想通过生成文件来自动化,例如通过premake 或 CMake。这将花费您更少的时间并生成正确的依赖关系。您的问题的直接答案可能是生成文件的简单扩展,但我会考虑另一种选择
-
您的问题不清楚。您试图不使用哪些文件路径?
-
@Beta 我正在尝试编译src文件夹下所有目录中的所有cpp文件。
-
并将所有生成的目标文件放入
out/?