Bootstrap

Makefile编译

要使用修改后的Makefile进行构建和生成目标文件,您可以按照以下步骤进行操作:

步骤一:准备工作

  1. 确保项目结构合理:确保您的项目目录结构中包含必要的源文件、头文件和Makefile文件。例如:

project_root/ ├── Makefile ├── Makefile.build ├── src/ │ ├── main.c │ └── ... ├── inc/ │ ├── ... └── build/

  1. 修改Makefile:根据前面的解释,确保您的Makefile已经按照需要将.o文件放到build文件夹。

修改后的Makefile示例

这里是一个完整的修改后的Makefile示例:

CROSS_COMPILE = aarch64-linux- AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld CC = $(CROSS_COMPILE)gcc CPP = $(CC) -E AR = $(CROSS_COMPILE)ar NM = $(CROSS_COMPILE)nm STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump export AS LD CC CPP AR NM export STRIP OBJCOPY OBJDUMP CFLAGS := -Wall -O2 -g CFLAGS += -I $(shell pwd)/inc LDFLAGS := -lpthread export CFLAGS LDFLAGS TOPDIR := $(shell pwd) export TOPDIR # 定义build文件夹变量 BUILD_DIR := $(TOPDIR)/build # 确保build文件夹存在 $(shell mkdir -p $(BUILD_DIR)) # 更新CFLAGS以指向build文件夹 CFLAGS += -c -o $(BUILD_DIR)/$@ # 更新目标文件路径 obj-y := $(addprefix $(BUILD_DIR)/, $(obj-y)) TARGET := ems-linux all : start_recursive_build $(TARGET) @echo $(TARGET) has been built! start_recursive_build: make -C ./ -f $(TOPDIR)/Makefile.build # 更新目标文件路径 $(TARGET) : $(BUILD_DIR)/built-in.o $(CC) $(LDFLAGS) -o $(TARGET) $(BUILD_DIR)/built-in.o clean: rm -f $(BUILD_DIR)/*.o rm -f $(TARGET) distclean: rm -f $(BUILD_DIR)/*.o rm -f $(BUILD_DIR)/*.d rm -f $(TARGET)

步骤二:编译项目

在项目根目录下打开终端,并运行以下命令来编译项目:

make

这个命令会调用make工具,按照Makefile中的规则编译项目,并生成目标文件ems-linux。所有的.o文件会被生成并放置在build文件夹中。

清理构建文件

如果您需要清理生成的构建文件,可以使用以下命令:

make clean

这个命令会删除build文件夹中的所有.o文件以及目标文件ems-linux

要进行更彻底的清理(包括删除生成的.d文件),可以使用:

make distclean

常见问题排查

  1. 路径问题:确保您的源文件和头文件路径正确,并且Makefile中的路径引用无误。
  2. 工具链问题:确保您的交叉编译工具链已经正确安装,并且环境变量已设置。如果有问题,请检查工具链路径和前缀。

;