VC 2005 解决方案的目录结构设置和管理
一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。
所以为解决方案设置一个合理的目录结构,不但可以使得代码管理更井井有条,项目成员之间也更容易相互配合,更重要的是能够使得最终应用程序的安装包制作,源代码打包发布和转移变得十分容易。
解决方案与项目:
从VC6之后VC系列就使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project)。
文章首先演示一个虚拟的解决方案和我们期望得到的目录结构,然后使用VC2005的项目设置功能来一步一步达到我们的需求。
虚拟解决方案:
该虚拟解决方案名为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)。
我们的需求是明确的,可是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
|
目标输出文件的全路径名
|
首先来设置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栏位:
VC可以让我们设置构建前后执行的脚本程序,所以为了完成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)/
这样就大功告成了,现在你就可以编译该执行程序并进行调试。
- Vs 2008 解决方案的目录结构设置和管理(转)
http://blog.csdn.net/lcj_cjfykx/article/details/8632459 MS的这个IDE,实在庞杂得恐怖.从大学开始,我就一直用VC的各个版本写程序至今,细细想 ...
- [转]Vs解决方案的目录结构设置和管理
原文地址:[转]Vs解决方案的目录结构设置和管理 作者:大明 以下内容为“原创”+“转载” 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对 ...
- VS解决方案的目录结构设置和管理
一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档.除此以外,根据项目的需求,还会使用一些第三方的库. 所以为解决 ...
- Visual Studio解决方案的目录结构设置和管理
摘至:http://blog.csdn.net/lp310018931/article/details/47991759 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件 ...
- VS下的解决方案目录结构设置和管理
转载:http://blog.csdn.net/pl20140910/article/details/52074165 为了方便管理自己写的代码,也为了日后工作能方便的查找之前做过相同的代码,仿照某源 ...
- VS 解决方案目录结构设置
涉及到的配置: 项目编译时使用的中间目录: 项目链接的输出目录: 项目编译结束后,拷贝生成的 dll 和 lib 到指定目录: 项目编译结束后,拷贝需要的 dll 到输出目录: 设置项目的工作目录: ...
- 转: VS 解决方案目录结构设置
https://www.cnblogs.com/zuibunan/p/3843459.html 下面的文章也有介绍 https://blog.csdn.net/lp310018931/article/ ...
- ECMALL目录结构设置与数据库表
[Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...
- Unity目录结构设置
摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...
随机推荐
- 基于PCA的人脸识别步骤
代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...
- Windows Azure 社区新闻综述(#76 版)
欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话.以下是本周的亮点. 文章.视频和博客文章 · 更新 Windows Azure 中的 SQ ...
- js实现无限级树形导航列表
- c.Tom and paper
Tom and paper Description There is a piece of paper in front of Tom, its length and width are intege ...
- c++,多继承造成的二义性及解决办法
#include <iostream> using namespace std; //------------------------------- class A1{ public: i ...
- java实现随机验证码的图片
链接地址:http://blog.sina.com.cn/s/blog_407a68fc010006qo.html 1.一共需要2个常用java文件(RandomCode.java和RandomCod ...
- Tomcat 常规配置并通过zabbix 监控 jvm状态
一:jdk和tomcat基础 apache有两种方式运行php,一是使用模块,二是使用fastcgi nginx也可以通过fastcgi处理动态请求,也可以转发至tomcat tomcat监控主要是监 ...
- JVM -- 类的初始化
<深入理解Java虚拟机> 第二版中介绍到了类的加载过程. 一个类从加载入内存到卸载出内存为止,整个生命周期包括: Loading(加载)-----Verification(验证)---- ...
- 创建.NET Core项目
创建.NET Core项目 ? 对于.NET开发人员来说,我们已经习惯了VS这个世界上最强大的IDE,所以对他们来说,项目的创建直接利用安装到VS中相应的项目模板即可.当.NET Core跨出了Win ...
- JavaScript 的数组操作--删除元素
在JavaScript中,可以很方便的删除指定位置的元素,这个是用到 splice方法, 该方法用于删除或替换数组中的部分数据. 其语法定义是 : splice(start , count [,new ...