要使用修改后的Makefile进行构建和生成目标文件,您可以按照以下步骤进行操作:
步骤一:准备工作
- 确保项目结构合理:确保您的项目目录结构中包含必要的源文件、头文件和Makefile文件。例如:
project_root/ ├── Makefile ├── Makefile.build ├── src/ │ ├── main.c │ └── ... ├── inc/ │ ├── ... └── build/
- 修改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
常见问题排查
- 路径问题:确保您的源文件和头文件路径正确,并且Makefile中的路径引用无误。
- 工具链问题:确保您的交叉编译工具链已经正确安装,并且环境变量已设置。如果有问题,请检查工具链路径和前缀。