作者: | 来源:互联网 | 2023-08-28 11:33
利用Makefile生成一个组件库#指定shell为bashSHELLbinbash#想要生成的组件库名称TARGET_LIB_A:libXXX.a#最终存放库文件和头文件的目录D
利用Makefile生成一个组件库
#指定shell为bash
SHELL=/bin/bash
# 想要生成的组件库名称
TARGET_LIB_A := libXXX.a
# 最终存放库文件和头文件的目录
DIST_INC := ./dist/include/component
DIST_LIB := ./dist/lib
DIST := ./dist/{ include/component/,lib/}
# 需要打包的头文件
SRC_INC := ./src/#.h \
./src/bbb.h \
./src/ccc.h
# 交叉编译链
CROSS_COMPILE=arm-himix200-linux-
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++
AR=$(CROSS_COMPILE)ar
# C/C++编译选项
CFLAGS := -Wall -Werror
CXXFLAGS :=
# 需要编译的源代码目录
SRC_DIR:= ./src \
./src/utils
# 需要编译的源代码文件格式
SFIX:= .c .cpp
# 得到源代码目录下的所有源代码文件
SOURCES := $(foreach x,${ SRC_DIR},\ $(wildcard \ $(addprefix ${ x}/*,${ SFIX})))
# 编译时指定的头文件路径
INCLUDES := -I./src -I./include -I./include/ebase
# 去掉扩展名,再追加.o的扩展名,得到依赖文件名集合 (带路径)
OBJS_FILE := $(addsuffix .o ,$(basename ${ SOURCES}))
# 1、先清理不必要的文件
# 2、生成库文件
all : clean $(TARGET_LIB_A)
mkdir -p $(DIST) #创建存放成果物的目录
mv $(TARGET_LIB_A) $(DIST_LIB) #拷贝生成的库文件
cp $(SRC_INC) $(DIST_INC) #拷贝头文件
$(TARGET_LIB_A) : $(OBJS_FILE)
$(AR) -rcs $@ $^
@rm -f $(OBJS_FILE)
%.o : %.c
$(CC) $(INCLUDES) -c $< -o $@ $(CFLAGS)
%.o : %.cpp
$(CXX) $(INCLUDES) -c $< -o $@ $(CXXFLAGS)
.PHONY: clean
clean:
rm -f $(OBJS_FILE)
rm -rf ./dist
利用Makefile生成一个可执行文件
#指定shell为bash
SHELL=/bin/bash
# 想要生成的可执行文件名称
DEMO:= demo
# 交叉编译链
CROSS_COMPILE=
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++
# C/C++编译选项
CXXFLAGS := -Wall -Werror -Wl,-rpath=../lib/ebase
# 需要编译的源代码目录
SRC_DIR:= ./src
# 需要编译的源代码文件格式
SFIX:= .c .cpp
# 得到源代码目录下的所有源代码文件
SOURCES := $(foreach x,${ SRC_DIR},\ $(wildcard \ $(addprefix ${ x}/*,${ SFIX})))
# 指定编译时的头文件路径
INCLUDES := -I../dist/include -I./src
# 指定需要链接库的路径
LIB := -L../lib/ebase -L../dist/lib
#指定需要链接的库
LINK := -lcXXX \
-lprotoc -lm -lrt -ldl
#去掉扩展名,再追加.o的扩展名,得到依赖文件名集合 (带路径)
OBJS_FILE := $(addsuffix .o ,$(basename ${ SOURCES}))
# 1、先清理不必要的文件
# 2、生成库文件
# 3、生成可执行文件
all : clean mklib $(DEMO)
$(DEMO) : $(OBJS_FILE)
$(CXX) $(INCLUDES) -o $@ $^ $(LIB) $(LINK) $(CXXFLAGS)
@rm -f $(OBJS_FILE)
%.o : %.c
$(CC) $(INCLUDES) -c $< -o $@
%.o : %.cpp
$(CXX) $(INCLUDES) -c $< -o $@
.PHONY: mklib
mklib:
make CROSS_COMPILE= -C ../
.PHONY: clean
clean:
rm -f $(OBJS_FILE)
rm -f ${DEMO}