いくつかの .c ファイルと 1 つの .s アセンブリ ファイル (crt0.s) を含む小さなプロジェクトがあります。.c ファイルは .o ファイルにコンパイルされ、./build サブディレクトリに保存されます。これらのファイルは正しくコンパイルおよびリンクされます。
.s ファイルも ./build ディレクトリに保存したいと思います。これまでのところ、私のメイクファイルは .s ファイルをコンパイルして正しい場所に保存していますが、リンカーはそれを見つけることができません。
表示されるエラーは、「ld.exe は crt0.o を見つけることができません」です。crt0.o は確実に ./build ディレクトリに作成されています。
メイクファイルは次のとおりです。
CC=arm-none-eabi-gcc
AS=arm-none-eabi-as
CFLAGS=-nostartfiles -nodefaultlibs -fno-builtin -Wall -T linker.ld -I./Include
objects=$(addprefix $(OBJDIR)/,crt0.o main.o gpiopins.o framebuffer.o drawchar.o putchar.o intconv.o strlen.o kprintf.o kputchar.o)
OBJDIR=./build
$(OBJDIR)/%.o: %.s
$(AS) -o $@ $<
$(OBJDIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
kernel.img: $(objects)
$(CC) -o kernel.img $(objects) $(CFLAGS)
.PHONY : clean
clean:
rm -f kernel.img
rm -f *.o
rm -f $(OBJDIR)/*.o
私が間違っているかもしれないアイデアはありますか?
ありがとうございました
編集:手動で行う場合は問題ありません。例えば:
kernel.img: $(objects)
arm-none-eabi-as -o crt0.o crt0.s
$(CC) -o kernel.img $(objects) $(CFLAGS)
ただし、これは crt0.o が ./build ディレクトリにないことを意味します