一个小型项目的目录结构和makefile的设计

说是设计,其实也算是总结吧!大致是想设计出来一个针对小型项目,难度适宜,较为通用的目录结构和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
------
[email protected]

 参考

【1】http://www.yesky.com/120/1865620.shtml Linux下Makefile的automake生成全攻略

 

你可能感兴趣的:(一个小型项目的目录结构和makefile的设计)