最近接手的一个项目开发中用到了很多第三方库,比如boost、gdal、xerces等等这些。从接手项目到现在从中学习到了很多之前从未见识过的东西。项目绝大部分都是前辈们写的,对于里面的对第三方库的管理我感觉是很不错的,所以记录下来以备后用,好的东西同时也应该分享给更多的可能会用到的。。。
项目开发中,如果遇到不是自己开发的项目时,当需要另外的人去维护时,经常连正常的编译连接都不能通过,很多的都是需要设置一些工程属性什么的,搞了半天最终才能编译通过。像这些类似的体力活可能是大多数人不愿弄的。
这里说的是对项目中所使用到的第三方库使用属性表进行统一管理起来,当在其他地方使用这些第三方库或者功能移植时直接创建或者添加属性表就可以满足需要了。
在项目解决方案目录下建立两个文件夹一个是用于存放所有第三方库的,另一个是存放项目中所有的属性表,这里我建立了一个“ThirdParty”用于存放所有的第三方库,然后建立了一个“CompileSetting”用于存放所有的属性表:
其中在“ThirdParty” 目录下存放的是不同的第三方库的子目录例如此处我使用的是一个名为“dll1” 的动态库子目录,在“dll1”子目录下存放的类似是包含“dll”、“lib”、“include”这些的子目录:
用于存放所使用的名为dll1的动态库dll、lib和一些头文件等等。
下面就可以针对“dll1” 添加一个属性表,方便在项目中使用,具体创建直接贴图了:
1.添加属性表
----------------------------------------
2.输入名称即所使用的第三方库的名称(自定义)
选择存放属性表的存放位置,这里需要说明一下就是存放的位置是上面在项目目录下新建的“CompileSetting” 用于统一存放所有的属性表。
-------------------------------
3.下面是为所创建的属性表添加“用户宏”输入名称(自定义)和值。其中值在“$(SolutionDir)”之后是上面在项目目录下创建的“ThirdParty”目录以及动态库其子目录“dll1”:
----------------
4.然后设置“附加包含目录”是刚才添加的用户宏“$(DLL1PATH)”然后跟上其目录下的子目录“include“指向动态库所使用的头文件:
”
-------------------------------
5.接着设置“附加库目录”指向动态库dll1下子目录“lib”
-------------------------------------
6.最后设置“生成后事件”拷贝所使用的动态库dll到可执行程序目录内,避免执行程序时还要拷贝dll,这里是拷贝到“$(OutDir)” 这也是一个用于输出编译的属性表:
---------------------------------
就此属性表dll1属性表创建成功,好像有点麻烦,但是现在麻烦一点是为以后的不麻烦。
下面在说下刚才提到的“$(OutDir)” 这也是一个属性表,用于设置项目编译的生成事件。它的创建和上面创建属性表的方法大致相同:
1.创建一个自定义的属性表名称,这里叫做“output”的属性表,然后分别添加三个用户宏即:
OUTPATH:
INTPATH:
还有一个DISTPATH:
---------------------------------------------------------------------------------------
至此output属性表设置成功,下面是设置项目解决方案的生成事件
2.设置“输出目录”和“中间目录”。这里填写的就是刚才创建output时添加的用户宏的名称:
===============================================================================
这样就可以重新编译一下项目解决方案了,以后在需要使用到例如dll1的动态库,直接拷贝“CompileSetting”和“ThirdParty”两个文件目录就行,想使用哪个动态库直接添加各动态库的属性表就可以,这里需要再说明一下属性表区分Debug和Release以及区分32位和64位的,所以创建的时候需要分别创建。