简单模块组织方式记录
目录组织结构
|-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