Makefile 工程样例模板

写了一个 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值