顶层 Makefile
CROSS_COMPILE ?=
KDIR ?= /lib/modules/$(shell uname -r)/build
ARCH ?= $(shell uname -m)
export CROSS_COMPILE KDIR ARCH
CP := @cp -rf
RM := @rm -rf
ECHO := @echo
MAKE := @make
TOUCH := @touch
MKDIR := @mkdir -p
MV := @mv -f
export CP RM ECHO MAKE TOUCH MKDIR MV
CC := @$(CROSS_COMPILE)gcc
LD := @$(CROSS_COMPILE)ld
AR := @$(CROSS_COMPILE)ar
STRIP := @$(CROSS_COMPILE)strip
export CC LD AR STRIP
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
GIT_HASH := $(shell git describe --tags --always --dirty=-X | sed 's/\//-/g')
export GIT_BRANCH GIT_HASH
OUT := $(shell pwd)/out
export OUT
CFLAGS := -g -std=gnu99 -I$(OUT)
LDFLAGS := -L$(OUT)
export CFLAGS LDFLAGS
SUB_DIRS := driver
SUB_DIRS += thirdpart/libusb
SUB_DIRS += api
SUB_DIRS += test/interface_test
SUB_DIRS += out/
.PHONY: all prebuild postbuild $(SUB_DIRS) clean env
all: prebuild $(SUB_DIRS) postbuild
$(ECHO) ""
prebuild:
$(ECHO) ""
$(MKDIR) $(OUT)
postbuild:
$(ECHO) ""
$(ECHO) "all build success"
$(SUB_DIRS):
$(ECHO) ""
$(ECHO) "*****************************************"
$(ECHO) "* Make $@ !!! "
$(ECHO) "*****************************************"
$(MAKE) -s -C $@
clean:
@$(foreach N, $(SUB_DIRS),make -s -C $(N) clean;)
env:
$(ECHO) $(GIT_BRANCH)
$(ECHO) $(GIT_HASH)
$(ECHO) $(MAKE)
$(ECHO) $(CC)
其他 Makefile
LDFLAGS += -lusb
SRC_FILES = main.c xprint.c utils.c
OBJS = $(SRC_FILES:%.c=%.o)
TARGET = interface_test.out
$(TARGET): $(OBJS)
$(CC) -o $(TARGET) $(CFLAGS) $(OBJS) $(LDFLAGS)
$(CP) $(TARGET) $(OUT)
$(OBJS):%.o:%.c
$(CC) -c $(CFLAGS) $< -o $@
$(ECHO) [CC] $<
clean:
$(RM) $(TARGET) *.o
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)