VS解决方案的目录结构设置和管理

一个中等规模的解决方案一般都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此之外,根据项目的需求,还会使用一些第三方的库。
 
因此为解决方案设置一个合理的目录结构,不但可使得代码管理更层次分明,项目成员之间也更容易相互配合,更重要的是可以使得最终应用程序的安装包制做,源代码打包发布和转移变得十分容易。
 
解决方案与项目:
从VC6以后VC系列就使用解决方案(Solution)来替代原来的工做空间,用于组织和管理多个相关的项目(Project)。
 
文章首先演示一个虚拟的解决方案和咱们指望获得的目录结构,而后使用VS的项目设置功能来一步一步达到咱们的需求。
 
 
虚拟解决方案:
 
该虚拟解决方案名为GMA,包含一个动态连接库项目ChocolateMilk和一个应用程序项目PureMilk,须要使用一个第三方库log4cxx(Apache log4j的C++移植版本,用于日志输出)。
 
log4cxx是以动态库的方式编译的,因此咱们须要它的3样东西,分别是头文件,导入库(log4cxx.lib, log4cxxd.lib)和动态连接库(log4cxx.dll)。
 
假设咱们指望的目录结构以下图:
 
 
1. GMA是解决方案目录
2. PureMilk和ChocolateMilk是项目目录
3. Lib目录用于存放导入库或者静态库(包括第三方库和本身的项目)
4. Include用于存放第三方库的头文件
5. Bin目录存放全部动态连接库和执行档,包括本身的产出和第三方库,区分Release和Debug两个版本。另外,程序运行过程当中须要外部的数据文件和启动时须要的配置文件等等均可放于该目录
6. Temp用于存放临时生成文件,其中Compile存放编译器编译时生成的obj文件,Link存放连接器的输出文件。
 
上面目录结构清晰,一面了然,当咱们的程序须要制做安装包或者要打包源码
发布的时候,它可以使得咱们生活变得更容易^_^
 
制做安装包时咱们只需将“\GMA\Bin\Release\”目录下的全部文件打包。
 
发布和转移源码的时候咱们能够打包除了Temp目录之外“\GMA\”下面的全部文件和目录(若是不须要执行档,也可不包括Bin)。
 
咱们的需求是明确的,但是VS并不会自动为咱们作好上面全部的事情。不过咱们并不须要编写复杂的编译脚本(makefile),只须要简单的修改项目的缺省设置便可。
 
咱们须要VC为咱们作的事情包括:
 
1.使用“\GMA\Temp\Compile\”做为项目编译时使用的中间目录
2.使用“\GMA\Temp\Link\”做为项目连接的输出目录
3.当项目是应用程序时,在构建结束后拷贝执行文件到“\GMA\Bin\Release\”或“\GMA\Bin\Debug\”,当项目是动态连接库时,除了拷贝dll到Bin,还拷贝导入库到“\GMA\Lib\”
4.当项目是应用程序时,调试时运行“\GMA\Bin\Debug\”或“\GMA\Bin\Release\”下面的执行文件,并以“\GMA\Bin\Debug\”或“\GMA\Bin\Release\”为工做目录
 
首先看一下项目设置中可使用的宏,经常使用的有:
ConfigurationName 配置名字,一般是Debug或者Release
IntDir 编译器使用的中间目录,产出obj文件
OutDir 连接器使用的输出目录
ProjectDir 项目目录
ProjectName 项目名字
SolutionDir 解决方案目录
TargetDir 目标输出文件所在的目录
TargetExt 目标输出的扩展名
TargetFileName 目标输出文件名,包括扩展名
TargetName 目标输出名,不包括扩展名
TargetPath 目标输出文件的全路径名

 

首先来设置ChocolateMilk
 
1.使用“\GMA\Temp\Compile\”做为项目编译时使用的中间目录
2.使用“\GMA\Temp\Link\”做为项目连接的输出目录
 
 
注意高亮的部分,首先将配置改为All Configuration(所有配置),这样可让咱们同时修改Debug和Release的部分;
 
Output Directory(输出目录,连接器)栏位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
 
Intermediate Directory(中间目录,编译器)栏位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
 
3.构建结束后拷贝动态连接库到“\GMA\Bin\Release\”或“\GMA\Bin\Debug\”,拷贝导入库到“\GMA\Lib\”
 
咱们一般都会在Debug版本的输出库后面加上字母“d”以表示这是Debug版本,在Debug配置下,修改Import Library栏位:
 
 
VS可让咱们设置构建先后执行的脚本程序,因此为了完成3,
咱们须要写构建后执行的脚本:
 
 
在Command Line中填入,Debug配置下:
 
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName)d.lib $(SolutionDir)\Lib\;
 
Release配置下:
 
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName).lib $(SolutionDir)\Lib\;
 
之因此要分别设置是由于VC没有表示导入库的宏名字 -_-P
 
OK,到此为止,你就能够编译ChocolateMilk项目试试是否是一切正常了,不过请确认拷贝的目标目录事先创建好。
 
接下来咱们设置应用程序项目PureMilk
 
1.使用“\GMA\Temp\Compile\”做为项目编译时使用的中间目录
2.使用“\GMA\Temp\Link\”做为项目连接的输出目录
 
首先将配置改为All Configuration(所有配置),这样可让咱们同时修改Debug和Release的部分;
 
Output Directory(输出目录,连接器)栏位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
 
Intermediate Directory(中间目录,编译器)栏位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
 
3.构建结束后拷贝执行文件到“\GMA\Bin\Release\”或“\GMA\Bin\Debug\”
 
在Command Line中填入,All配置下:
 
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName);
 
4.调试时运行“\GMA\Bin\Debug\”或“\GMA\Bin\Release\”下面的执行文件,并以“\GMA\Bin\Debug\”或“\GMA\Bin\Release\”为工做目录
 
 
Command栏位填入:$(SolutionDir)\Bin\$(ConfigurationName)\$(TargetFileName)
Working Directory栏位填入:$(SolutionDir)\Bin\$(ConfigurationName)\
 
这样就大功告成了,如今你就能够编译该执行程序并进行调试。
相关文章
相关标签/搜索