c/c++项目如何管理头文件
2012-12-14 21:01
155 查看
最近的项目一直在讨论如何管理头文件,原项目使用Visual Studio开发,源文件中对头文件的引用比较乱,有很多类似于"../../include/header.h"的头文件引用。现在要移植到类UNIX平台,头文件的引用管理问题也逐渐显露出来。
IDE的使用一方面简化了我们的开发工作,另一方面也让我们丧失了对某些领域的控制,或者说让我们疏忽了对某些领域的控制感,不知不觉我们就按照IDE的默认方式做了,甚至转而适应IDE的默认方式。这就如同猎人转而耕作农田,农民转向城市打工,都逐渐丢失掉原应持有的生存本领。也许这就是社会和技术进步的负面影响吧!
看到问题之后,我们找一个参照物,看看到底怎么清晰地管理头文件(也许每个人都知道,但没有几个人这样做,或者没时间这样做)。
有一个开源项目叫做asterisk(很有名,google一下就看到了),它在项目中有一个include/文件夹,下面有一个asterisk.h文件和一个asterisk子文件夹,这个asterisk子文件夹包含了所有其他源文件需要引用的公共头文件。而模块内不想暴露在外的头文件则放置在和模块源文件相同的路径。因此源文件引用头文件的方式就是下面这个样了:
=======================================================================
/*公共头文件*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 366408 $")
/*系统头文件*/
#include <ctype.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <signal.h>
#ifdef HAVE_LINUX_COMPILER_H
#include <linux/compiler.h>
#endif
#include <linux/telephony.h>
/* Still use some IXJ specific stuff */
#include <linux/version.h>
#include <linux/ixjuser.h>
/*公共头文件*/
#include "asterisk/lock.h"
#include "asterisk/channel.h"
#include "asterisk/config.h"
#include "asterisk/module.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/callerid.h"
#include "asterisk/causes.h"
#include "asterisk/stringfields.h"
#include "asterisk/musiconhold.h"
/*模块内头文件*/
#include "chan_phone.h"
=======================================================================
例子就在这里,多余的话不说了。
IDE的使用一方面简化了我们的开发工作,另一方面也让我们丧失了对某些领域的控制,或者说让我们疏忽了对某些领域的控制感,不知不觉我们就按照IDE的默认方式做了,甚至转而适应IDE的默认方式。这就如同猎人转而耕作农田,农民转向城市打工,都逐渐丢失掉原应持有的生存本领。也许这就是社会和技术进步的负面影响吧!
看到问题之后,我们找一个参照物,看看到底怎么清晰地管理头文件(也许每个人都知道,但没有几个人这样做,或者没时间这样做)。
有一个开源项目叫做asterisk(很有名,google一下就看到了),它在项目中有一个include/文件夹,下面有一个asterisk.h文件和一个asterisk子文件夹,这个asterisk子文件夹包含了所有其他源文件需要引用的公共头文件。而模块内不想暴露在外的头文件则放置在和模块源文件相同的路径。因此源文件引用头文件的方式就是下面这个样了:
=======================================================================
/*公共头文件*/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 366408 $")
/*系统头文件*/
#include <ctype.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <signal.h>
#ifdef HAVE_LINUX_COMPILER_H
#include <linux/compiler.h>
#endif
#include <linux/telephony.h>
/* Still use some IXJ specific stuff */
#include <linux/version.h>
#include <linux/ixjuser.h>
/*公共头文件*/
#include "asterisk/lock.h"
#include "asterisk/channel.h"
#include "asterisk/config.h"
#include "asterisk/module.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/callerid.h"
#include "asterisk/causes.h"
#include "asterisk/stringfields.h"
#include "asterisk/musiconhold.h"
/*模块内头文件*/
#include "chan_phone.h"
=======================================================================
例子就在这里,多余的话不说了。
相关文章推荐
- c/c++项目如何管理头文件
- 如何在windows下使用git及github仓库管理项目
- 【Android学习笔记】如何使用Eclipse在Android项目中调用C/C++代码,及遇到的错误解决方法
- [转]从程序员到项目经理(12):如何管理自己的时间(上)
- 从程序员到项目经理(12):如何管理自己的时间(上)
- 如何在github上创建组织并对组织进行管理和团队协作开发项目
- 软件项目管理第二讲,如何带队伍
- 项目经理修炼手册,泄露章节,面对复杂管理工作如何进行自我调节
- c/c++ 数据结构-线性表(工程项目案例:图书信息管理系统)
- 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
- 如何做好项目管理
- 互联网大公司体制内创新的重重阻力 从大公司的管理体制和考核制度等多个角度阐述,大公司体制内创新的困境,这也是国内多数公司面临的问题,本篇分析了阻碍体制内创新的原因,也给出了如何推进公司体制内的创新项目
- 小公司的项目该如何管理
- 项目管理手记(26) 销售过度承诺的项目,实施顾问如何善后? 推荐
- 项目版本管理:git如何放弃本地working directory的修改,以及回滚
- 如何使用Worktile进行敏捷项目开发管理
- 项目管理总结——如何处理项目突发事件
- 如何使用gyp管理c++工程(ubuntu版)
- 如何做好管理软件项目实施
- 项目经理修炼手册 1.4面对复杂的管理如何进行自我调试(如何进行选择)