87 lines
1.8 KiB
Makefile
87 lines
1.8 KiB
Makefile
# 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)"
|