# CAN 协议栈 — 顶层 Makefile # 构建协议栈库和测试程序 # # 交叉编译: # export CC=aarch64-buildroot-linux-gnu-gcc # make # # 本地测试(PC + vcan): # make HOST=1 # ---- 交叉编译器设置 ---- # 参考创龙 RK3568 SDK 的工具链路径 CROSS_COMPILE ?= aarch64-buildroot-linux-gnu- CC ?= $(CROSS_COMPILE)gcc # ---- 构建选项 ---- CFLAGS = -Wall -g -O2 -std=gnu99 INCLUDES = -Iinclude LDFLAGS = LIBS = -lpthread -lrt # 如果是本地编译(不用交叉工具链) ifdef HOST CC = gcc CFLAGS += -DHOST_BUILD endif # ---- 目录 ---- SRC_DIR = src INC_DIR = include APP_DIR = app BUILD_DIR = build # ---- 源文件 ---- SRC = $(wildcard $(SRC_DIR)/*.c) OBJS = $(SRC:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) APP_SRC = $(APP_DIR)/test_protocol.c APP_OBJ = $(BUILD_DIR)/test_protocol.o # ---- 目标 ---- LIB_TARGET = $(BUILD_DIR)/libcanprot.a APP_TARGET = $(BUILD_DIR)/can_test .PHONY: all lib app clean install all: lib app lib: $(LIB_TARGET) app: $(APP_TARGET) # 确保 build 目录存在 $(BUILD_DIR): mkdir -p $(BUILD_DIR) # 编译协议栈库 $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR) $(CC) -c $< -o $@ $(INCLUDES) $(CFLAGS) $(LIB_TARGET): $(OBJS) $(AR) rcs $@ $^ # 编译测试程序 $(BUILD_DIR)/test_protocol.o: $(APP_DIR)/test_protocol.c | $(BUILD_DIR) $(CC) -c $< -o $@ $(INCLUDES) $(CFLAGS) $(APP_TARGET): $(APP_OBJ) $(LIB_TARGET) $(CC) $(CFLAGS) -o $@ $(APP_OBJ) -L$(BUILD_DIR) -lcanprot $(LDFLAGS) $(LIBS) # 清理 clean: rm -rf $(BUILD_DIR) # 安装到目标板 install: cp $(APP_TARGET) $(PREFIX)/can_test # 显示构建信息 info: @echo "编译器: $(CC)" @echo "CFLAGS: $(CFLAGS)" @echo "源文件: $(SRC)" @echo "目标文件: $(OBJS)" @echo "库: $(LIB_TARGET)" @echo "测试程序: $(APP_TARGET)"