说是设计,其实也算是总结吧!大致是想设计出来一个针对小型项目,难度适宜,较为通用的目录结构和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的设计
这里不讲makefile规则,这类文章网上有的是。这里主要是复用角度、移植角度、维护角度构造3个较为通用的makefile文件。
(1)pubmake 定义系统公共的变量、目录、编译选项等。
(2)库文件编译的makefile
(3)src目录下的makefile 编译整个系统的makefile
pubmake 文件如下:
#!/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
库文件编译的makefile
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}
整个系统编译的makefile
针对库文件已经编译好的情况下,简易的makefile
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}
自动编译整个系统的makefile
待补充
ReadMe结构
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
------
zhq651@126.com
参考
【1】http://www.yesky.com/120/1865620.shtml Linux下Makefile的automake生成全攻略