说是设计,其实也算是总结吧!大致是想设计出来一个针对小型项目,难度适宜,较为通用的目录结构和makefile。如果你想要自动编译、自动测试、自动集成,不好意思!能力不足,请略过吧!
一般小型的系统都具有以下的目录:
myproject/ include/ 公共头文件,放在外面的原因是这部分头文件,具有部分接口的性质 src/ 源代码目录 publib1/ 公共库1 Makefile pub1.h pub1.cpp ....cpp publib2/ 公共库2 ... busi1/ 业务模块1 busi2/ 业务模块2 ... main.cpp 系统主程序 pubmake 公共makefile 后面会讲述其结构 Makefile 系统编译makefile README ReadMe文档,后面会讲述其结构 lib/ 库目录 bin/ 可执行文件目录 cfg/ 配置文件目录 res/ 资源目录 log/ 日志目录目录分析:
以上目录大致分为源文件部分(include/、src/)、编译部分(lib/、res/)、运行部分(bin/、cfg/、log/、res/)
这里不讲makefile规则,这类文章网上有的是。这里主要是复用角度、移植角度、维护角度构造3个较为通用的makefile文件。
(1)pubmake 定义系统公共的变量、目录、编译选项等。
(2)库文件编译的makefile
(3)src目录下的makefile 编译整个系统的makefile
#!/bin/sh ###This is a public makefile,you can use it by importing into your Makefile. ###Don't modify this file,unless it's neccesary. ###@pub directory@ PROG_HOME=/home/dam/code/test/test_mk LIB_DIR=$(PROG_HOME)/lib BIN_DIR=$(PROG_HOME)/bin ###@include@ SYS_INCLUDE= PROG_INCLUDE=$(PROG_HOME)/include CONFIG_INCLUDE=$(PROG_HOME)/src/config INCLUDE=-I. -I${CONFIG_INCLUDE} -I${PROG_INCLUDE} ###@compiler@ C_COMP=gcc CFLAGS=-g CPP_COMP=g++ CPPFLAGS= -g ###@archive@ DYNLIBFLAGS=-shared -fPCI AR=ar rc ###@auto depedence@ .c.o: $(C_COMP) $(CFLAGS) $(INCLUDE) -c $*.c -o $@ .cpp.o: $(CPP_COMP) $(CPPFLAGS) $(INCLUDE) -c $*.cpp -o $@ ###@clean@ .PHONY:clean clean: rm -f *.o
include ../pubmake a:libconfig.a clean so:libconfig.so clean CONFIG_OBJ=config.o ###@static lib@ libconfig.a:$(CONFIG_OBJ) ${AR} -o $@ $(CONFIG_OBJ) mv $@ ${LIB_DIR} ###@shared lib@ libconfig.so:$(CONFIG_OBJ) $(CPP_COMP) $(CPPFLAGS) $(INCLUDE) ${DYNLIBFLAGS} -o $@ $(CONFIG_OBJ) mv $@ ${LIB_DIR}
include ./pubmake all:test clean MAIN_OBJ=main.o test:${MAIN_OBJ} ${CPP_COMP} ${CPPFLAGS} $(INCLUDE) ${MAIN_OBJ} -o $@ -l ${LIB_DIR}/libconfig.a mv $@ ${BIN_DIR}
ReadMe文档描述了整个系统的名称、背景、安装(编译)、运行等信息,内容相对比较自由,开发者完全可以根据自己喜好安排,
这里大概提供一个我自己写过的ReadMe,仅供参考。
Preface ------- 该系统主要用来.....; 本软件符合Posix标准,兼容主流Linux系统 Copyright --------- Copyright (c) 2013, 北京**科技信息股份有限公司 All rights reserved. 本软件,包括了机密资料,是私有和保密的,属于北京**科技信息股 份有限公司的财产与版权所有。未经公司许可,不得对任何部分或 全部文档进行复制,不得进行其他系统转存,不得以任何形式或任何 方式进行传播,包括电子的、机械的、化学的、影印本、录制或者其 他方式。 Files and Directories in this Archive ------------------------------------- myproject/ include/ 公共头文件,放在外面的原因是这部分头文件,具有部分接口的性质 src/ 源代码目录 publib1/ 公共库1 Makefile pub1.h pub1.cpp ....cpp publib2/ 公共库2 ... busi1/ 业务模块1 busi2/ 业务模块2 ... main.cpp 系统主程序 pubmake 公共makefile 后面会讲述其结构 Makefile 系统编译makefile README ReadMe文档,后面会讲述其结构 lib/ 库目录 bin/ 可执行文件目录 cfg/ 配置文件目录 res/ 资源目录 log/ 日志目录 How to compile -------------- cd myproject/src make all Usage ------- Author ------ Dam Time ---- 2013-1-13 e-Mail ------ [email protected]
【1】http://www.yesky.com/120/1865620.shtml Linux下Makefile的automake生成全攻略