现在的位置: 首页 > 综合 > 正文

boost库命名规则的优点

2013年11月24日 ⁄ 综合 ⁄ 共 1167字 ⁄ 字号 评论关闭

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

         我们编译出来的二进制库文件该如何命名呢?当我经验尚浅时,发现这个不是问题——就以工程名来命名呗。但慢慢发现这种命名是有很多问题的(特别是当你升级编译器时,比如从VS2005升级到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版本,一个简单例子就是libpng_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png静态库,是debug版本(.lib前面用一个d来区分),库版本为V 1.3。(对应的release版本命名为libpng_vc80_1_3.lib)。

 

导入库和动态库命名:工程名_编译器信息_版本信息_互操作性细节信息.lib,这里的互操作性细节信息初步分为debug版本还是release版本,一个简单例子就是png_vc80_1_3_d.lib,表示这个是由VS 2005编译出来的png导入库,库版本为V 1.3。(对应的release版本命名为png_vc80_1_3.lib)。

                    

         之所以不加线程信息,是因为我们现在开发的基本是多线程程序,所以默认构建多线程库。线程信息就没必要加了。

 

 

 

 

 

 

 

 

抱歉!评论已关闭.