boost库命名规则的优点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
boost库命名规则的优点
作者:朱金灿
来源:/clever101
我们编译出来的二进制库文件该如何命名呢?当我经验尚浅时,发现这个不
是问题——就以工程名来命名呗。但慢慢发现这种命名是有很多问题的(特别是当你升级编译器时,比如从VS 2005升级到VS2010时,或者是软件打包时):比如debug版本和release版本的库区分不开,不同版本的编译器编出的库区分不开(很多时候面对一个库你不知道它是VC6.0、VS 2005还是VS 2008编出来的),静态
库还是导入库区分不开,代码库的版本不知道……可能你会说:不是有个depends
工具,用它打开查看一下就知道了。问题一是假如库文件很多时,谁愿意一一去查看;二是静态库还是导入库靠depends工具是判断不出来的。而在开发时混用不同版本的库文件,会造成很多莫名其妙的问题。
如何解决这个问题?唯有靠规范的命名。怎样才算是规范的库文件命名?我觉得指导原则应该是见名知意。如果根据见名知意这个原则来衡量,我发现boost库
是做得比较规范的。关于boost库的命名规则,具体请见这篇文章:Boost 库命名
规则(翻译)。boost库的命名,涵括了下面几方面信息:
1.库的功能信息(即是序列化库、正则库还是其它功能的库)
2.静态库还是导入库(静态库以lib开头)
3.构建该库的具体编译器信息
4.线程标签(是多线程还是单线程)
5.影响库与其它编译代码的互操作性的细节的编码(debug版本还是release版
本,是否使用了STLPORT)
6.boost库的版本信息
面对这样规范的命名,你还会混用吗?据此我也简单制定了一个Windows环境下的库文件的命名规则:
静态库命名:lib+工程名_编译器信息_版本信息_互操作性细节信息.lib,
这里的互操作性细节信息初步分为debug版本、release版本以及多字节版本和unicode版本。
一个简单例子就是libpng_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png静态库,是debug版本(.lib前面用一个d来区分),库版本为V 1.3,采用多字节字符集编译。(对应的release版本命名为libpng_vc80_1_3.lib)。如果是unicode版本,名称则是libpng_vc80_1_3_ud.lib和libpng_vc80_1_3_u.lib (多了一个字母u)。
导入库:工程名_编译器信息_版本信息_互操作性细节信息.lib,这里的互操作性细节信息初步分为debug版本还是release版本,一个简单例子就是
png_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png导入库,库版本为V 1.3。(对应的release版本命名为png_vc80_1_3.lib)。如果是unicode版本,名称则是png_vc80_1_3_ud.lib和png_vc80_1_3_u.lib (多了一个字母u)。动态库命名与导入库一样,不过是后缀名改为dll。
之所以不加线程信息,是因为我们现在开发的基本是多线程程序,所以默认构建多线程库。线程信息就没必要加了。