首页 技术 正文
技术 2022年11月12日
0 收藏 552 点赞 2,540 浏览 3256 个字

VC 2005 解决方案的目录结构设置和管理 Roger (roger2yi@gmail.com) 一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。 所以为解决方案设置一个合理的目录结构,不但可以使得代码管理更井井有条,项目成员之间也更容易相互配合,更重要的是能够使得最终应用程序的安装包制作,源代码打包发布和转移变得十分容易。 解决方案与项目:从VC6之后VC系列就使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project)。 文章首先演示一个虚拟的解决方案和我们期望得到的目录结构,然后使用VC2005的项目设置功能来一步一步达到我们的需求。  虚拟解决方案: 该虚拟解决方案名为GMA,包含一个动态链接库项目ChocolateMilk和一个应用程序项目PureMilk,需要使用一个第三方库log4cxx(Apache log4j的C++移植版本,用于日志输出)。 log4cxx是以动态库的方式编译的,所以我们需要它的3样东西,分别是头文件,导入库(log4cxx.lib, log4cxxd.lib)和动态链接库(log4cxx.dll)。 假设我们期望的目录结构如下图: VC 2005 解决方案的目录结构设置和管理 1. GMA是解决方案目录2. PureMilk和ChocolateMilk是项目目录3. Lib目录用于存放导入库或者静态库(包括第三方库和自己的项目)4. Include用于存放第三方库的头文件5. Bin目录存放所有动态链接库和执行档,包括自己的产出和第三方库,区分Release和Debug两个版本。另外,程序运行过程中需要外部的数据文件和启动时需要的配置文件等等都可放于该目录6. Temp用于存放临时生成文件,其中Compile存放编译器编译时生成的obj文件,Link存放链接器的输出文件。 上面目录结构清晰,一面了然,当我们的程序需要制作安装包或者要打包源码发布的时候,它能够使得我们生活变得更容易^_^ 制作安装包时我们只需将“/GMA/Bin/Release/”目录下的所有文件打包。 发布和转移源码的时候我们可以打包除了Temp目录以外“/GMA/”下面的所有文件和目录(如果不需要执行档,也可不包括Bin)。 我们的需求是明确的,可是VC 2005并不会自动为我们做好上面所有的事情。不过我们并不需要编写复杂的编译脚本(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 目标输出文件的全路径名

 VC 2005 解决方案的目录结构设置和管理 首先来设置ChocolateMilk 1.使用“/GMA/Temp/Compile/”作为项目编译时使用的中间目录2.使用“/GMA/Temp/Link/”作为项目链接的输出目录  VC 2005 解决方案的目录结构设置和管理 注意高亮的部分,首先将配置改成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栏位:  VC 2005 解决方案的目录结构设置和管理 VC可以让我们设置构建前后执行的脚本程序,所以为了完成3,我们需要写构建后执行的脚本:VC 2005 解决方案的目录结构设置和管理  在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/”为工作目录 VC 2005 解决方案的目录结构设置和管理 Command栏位填入:$(SolutionDir)/Bin/$(ConfigurationName)/$(TargetFileName)Working Directory栏位填入:$(SolutionDir)/Bin/$(ConfigurationName)/ 这样就大功告成了,现在你就可以编译该执行程序并进行调试。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294