简单模块组织方式记录
目录组织结构
|-Makefile(主)
|-*.c
|-*.h
|-src
|--ModuleA
|-*.c
|-Makefile(模块)
|--ModuleB
|-*.c
|-Makefile(模块)
|--ModuleC
|-*.c
|-Makefile(模块)
|-inc
|--ModuleA
|-*.h
|--ModuleB
|-*.h
|--ModuleC
|-*.h
|-lib
|-*.a
主makefile:
INCLUDES = -I./inc
#LIBS = -Wl,--start-group -lModuleC -lModuleB -lModuleA -Wl,--end-group
#LIBS = -Wl,--start-group -lModuleB -lModuleA -Wl,--end-group
LIBS = -lModuleA -lModuleB -lModuleC
LIB_DIRS = -L./lib
SRCS = $(wildcard ./*.c)
OUT = Test
OBJS = ${SRCS:.c=.o}
${OUT}:${OBJS} lib
#gcc -o $@ $^ ${INCLUDES} ${LIB_DIRS} ${LIBS}
gcc -o $@ ${OBJS} ${INCLUDES} ${LIB_DIRS} ${LIBS}
%.o:%.c
gcc -c ${INCLUDES} $<
.PHONY:lib
lib:
cd src/ModuleA;\
make
cd src/ModuleB;\
make
cd src/ModuleC;\
make
lib_clean:
cd src/ModuleA;\
make clean
cd src/ModuleB;\
make clean
cd src/ModuleC;\
make clean
cd lib;\
rm -rf *.a
.PHONY:clean
clean:
rm -rf *.o
rm -rf ${OUT}
子模块Makefile
INCLUDE = -I../../inc
SRCS = $(wildcard ./*.c)
MODULE = libModuleA
OBJS = ${SRCS:.c=.o}
CFLAGS += ${INCLUDE}
all:${MODULE}.mk
make -f ${MODULE}.mk ${OBJS}
ar -r ${MODULE}.a ${OBJS}
cp -rf ${MODULE}.a ../../lib
${MODULE}.mk:${SRCS}
cp -rf Makefile $@
chmod +w $@
echo "\n\n" >> $@
gcc ${INCLUDE} -M ${SRCS} >> $@ #生成.h文件依赖,.h改变后也会重新编译
clean:
rm -rf *.o
rm -rf ${MODULE}.mk
模块化项目构建
本文介绍了一种基于模块化的项目组织及构建方式,通过详细的目录结构和Makefile配置展示如何高效地管理和编译多模块项目。重点讲解了如何利用递归调用在不同模块间进行编译,以及如何设置依赖项来确保项目的正确构建。
1200

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



