我有这个Makefile:
CFLAGS = -ffreestanding -O2 -nostdlib -lgcc
BUILD_DIR = ../build
BIN = $(BUILD_DIR)/os.bin
LINKER_SCRIPT = linker.ld
OBJ_FILES := $(shell find $(BUILD_DIR) -iname '*.o')
.PHONY: all
all:
@make -C boot
@make -C kernel
$(CC) -T $(LINKER_SCRIPT) -o $(BIN) $(CFLAGS) $(OBJ_FILES)
编译后(在引导目录和内核目录中进行制作),应该具有扩展名为.o的文件,但是OBJ_FILES为空。只有在再次调用make之后,OBJ_FILES才会包含链接所需的.o文件路径。所以我的问题是在引导目录和内核目录中编译后如何更新OBJ_FILES,因为OBJ_FILES不会更新/刷新。
正如@AnttiHaapala所指出的那样,您的基本方法不好。但是,如果您真的想这样做,可以这样做:
all:
...
$(CC) -T $(LINKER_SCRIPT) -o $(BIN) $(CFLAGS) $(BUILD_DIR)/*.o