写了一个 src, obj, bin 结构的 Makefile。先记录,方便日后复用,扩展。
文件结构
$ tree -L 1
.
├── bin
├── Makefile
├── obj
└── src
Makefile 模板
TOOLCHAINS_DIR = /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/
CROSS_COMPILE = $(TOOLCHAINS_DIR)arm-linux-gnueabihf-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
ARFLAGS = rcs
MAIN_VERSION = 1
SUB_VERSION = 0
BUILD_TIME = $(shell date +"%Y%m%d%H%M%S")
DEVICE_SOFTWARE_VERSION = \"V$(MAIN_VERSION).$(SUB_VERSION)_$(BUILD_TIME)\"
CFLAG += -DDEVICE_SOFTWARE_VERSION=$(DEVICE_SOFTWARE_VERSION)
$(warning "DDEVICE_SOFTWARE_VERSION=$(DEVICE_SOFTWARE_VERSION)")
CFLAG = -Wall -Winline -g
INC = -I.
LIBINC = -L.
LIBS = -lpthread -lm -lshared -lnvram -lcurl
SRC_DIR = .
BIN_DIR = ./bin
OBJ_DIR = ./obj
LIB_DIR = .
DIRS = $(BIN_DIR) $(OBJ_DIR) $(LIB_DIR)
SRC = $(wildcard $(SRC_DIR)/*.c)
OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC))
BIN = app
BIN := $(addprefix $(BIN_DIR)/, $(BIN))
LIB = libembedded.a
LIB := $(addprefix $(LIB_DIR)/, $(LIB))
$(DIRS):
@if [ ! -x $@ ]; then \
mkdir $@; \
fi
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c
$(CC) $(CFLAG) $(INC) -c $< -o $@
$(BIN): debug $(DIRS) $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) -o $(BIN) $(LIBINC) $(LIBS)
$(LIB): debug $(DIRS) $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
.PHONY: clean debug
debug:
@echo "***********************"
@echo "* SRC: "$(SRC)
@echo "* OBJS: "$(OBJS)
@echo "* BIN: "$(BIN)
@echo "* LIB: "$(LIB)
@echo "***********************"
clean:
rm -rf $(OBJS) $(LIB) $(BIN)
使用说明
src目录存放源码
lib生成库文件至该目录
obj生成中间文件至该目录
bin生成可执行文件至该目录
makefile会根据编译时间,自动生成BUILD_TIME宏,可以自行用在程序的软件版本中使用。(使用前需要clean)

8391

被折叠的 条评论
为什么被折叠?



