# ================================================================ # 1. 确保交叉编译工具链路径正确 # 2. 确保源码放在src目录,头文件放在inc目录 # 3. 命令行执行: # make # 编译 # make clean # 清理 # # 4. 编译输出文件在build下:msg_udp_ctrl.out # ================================================================ # TODO 交叉编译器路径配置 TOOLCHAIN_DIR ?= /home/qieyuan/bupt_project/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu CROSS_COMPILE ?= $(TOOLCHAIN_DIR)/bin/aarch64-linux-gnu- # 编译配置 CC = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)ar STRIP = $(CROSS_COMPILE)strip # 输出目录配置 BUILD_DIR = build TARGET = $(BUILD_DIR)/msg_udp_ctrl.out # 代码目录配置 SRC_DIR = src INC_DIR = inc OBJ_DIR = $(BUILD_DIR)/obj # 编译器选项配置 CFLAGS = -O2 -Wall -Werror -g CFLAGS += -I$(INC_DIR) # 头文件搜索路径 CFLAGS += -MMD -MP # 自动生成依赖关系 CFLAGS += -fPIC # 位置无关代码 LDFLAGS = -lpthread -lrt # 多线程与mmap拓展库 # UDP专用宏定义 # DEFINES = -DUSE_UDP_OPTIMIZE=1 # CFLAGS += $(DEFINES) # 自动收集源文件 SRCS = $(wildcard $(SRC_DIR)/*.c) OBJS = $(SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o) DEPS = $(OBJS:.o=.d) # 依赖 # ======================== 构建规则 =============================== .PHONY: all clean all: $(TARGET) # 主目标链接 $(TARGET): $(OBJS) @echo "Linking $@" @mkdir -p $(@D) # 创建目标目录 $(CC) $^ -o $@ $(LDFLAGS) # 编译规则 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c @echo "Compiling $<" @mkdir -p $(@D) # 创建对象目录 $(CC) $(CFLAGS) -c $< -o $@ # 包含自动生成的依赖关系 -include $(DEPS) clean: rm -rf $(BUILD_DIR)