在开发过程中,难免要使用一些第三方的库,有些是lib文件,有些是源代码,而且每个库可能都有不一样的版权说明。这就需要在使用时根据不同的情况做不同的管理。这篇文章就是把自己的方法记录一下,以备忘。
之前的开发中,我一般会把所有的第三方库单独放到一个名叫third_party的文件夹中。不管版本控制工具使用svn还是git,我都会把这些库文件和源文件一起加入到自己的代码库里。然后打下标签,写明版本信息,比如coredumper-v1.2.1。因为第三方库经常会做一些自己的修改,所以如果想要更新这些库的时候就可能会有一些麻烦。git还好一些,只要保存了没有修改过的tag,从那里开个分支,然后更新第三方库,再把主干merge到分支上,有冲突解决一下就可以了。svn因为分支merge做的不是很好,所以经常会出问题。一般的解决办法往往是,覆盖原来的第三方库,然后看log把所有修改重复一遍。如果修改了很多内容,就比较头痛。
现在,我所有的代码版本管理已经放弃svn完全转用git了,git是非常适合程序员使用的版本工具,功能非常强大。而且github这个网站,对开源的管理也非常方便。
目前我使用的管理第三方库的方法就是结合github来进行的。所有的第三方库不再放入自己的代码库中,而是使用git submodule从其他git库中获取。因为需要有自己的修改,所以不能直接使用别人的git库。因为用到的大部分第三方库都是开源的,所以目前的方法是在自己的github上创建相应的工程。如果github上已经有第三方官方工程的,直接fork一下,变成自己的就可以了。如果没有的就将代码拷入github的自己项目中。每个第三方库都做成一个单独的git工程。然后自己的工程里用git submodule add 加进来。第三方库相关的修改,就全部都修改在github上了。以后所有的merge工作也只会出现在github的第三库工程里。因为自己工程里没有第三方库的代码,所以clone自己代码的时候,在clone结束后要用git submodule init初始化,然后使用git submodule update更新相应代码。
关于版权问题,如果第三方库的版权是BSD、APACHE、MIT这类比较宽松的协议,都可以直接使用源代码编译,我一般后编译成静态链接库在工程中使用,虽然执行程序会变大,但是使用起来相对方便一些。如果是LGPL协议,就要编译成动态链接库来使用了。如果GPL协议的话,尽可能将它编译成单独的执行文件,然后与自己的工程合作工作。
- 本文固定链接: http://www.wy182000.com/2013/08/06/关于第三方库的使用/
- 转载请注明: wy182000 于 Studio 发表