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)/

这样就大功告成了,现在你就可以编译该执行程序并进行调试。

时间: 2024-07-30 23:51:12

VS解决方案的目录结构设置和管理的相关文章

Vs 2008 解决方案的目录结构设置和管理(转)

http://blog.csdn.net/lcj_cjfykx/article/details/8632459 MS的这个IDE,实在庞杂得恐怖.从大学开始,我就一直用VC的各个版本写程序至今,细细想来,也仅仅是窥豹一斑,羞愧不已.但若仔细翻阅文档,又觉得时间花得不值,于是便一直凑活地用着. 前段时间负责搭建新项目的开发环境,兼一直在看Gamebryo的代码,从中借鉴了不少工程管理的方法.结合以前使用VC的经验,现总结下来与大家分享,希望能起到抛砖引玉的作用. 项目目录结构 VC用解决方案(so

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

摘至:http://blog.csdn.net/lp310018931/article/details/47991759 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项 目,此时生成的最外层目录为fangan代表整个解决方案的内容都在这个文件夹内.在这个fangan文件夹内包含有fangan.sln的解决方案配置 文件和一个ssyy文件夹,ssyy

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

转载:http://blog.csdn.net/pl20140910/article/details/52074165 为了方便管理自己写的代码,也为了日后工作能方便的查找之前做过相同的代码,仿照某源码结构,自己建了一个解决方案,以方便管理自己的代码,这样代码迁移也比较方便,不需要每次重新配置第三方库或其它需要依赖的库.下图为整个解决方案目录结构设置: 图1 VS解决方案目录结构设置 如上图,为了方便管理,以后所有的项目都写在AllProject解决方案里,途中红色的部分表示的都是文件夹,绿色的

[Ecmall]ECMALL目录结构设置与数据库表

最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛连二次开发板块都没有,都在哪瞎扯淡,广告一堆.可悲~~~ 自己做了一张图片,根据ecmall的程序结构图,可以清楚的知道ecmall的五脏六腑. ECMALL数据库主要表 ecm_acategory:存放的是商城的文章分类. ecm_address:存放的是店长的地址 ecm_article:存放的是商城的相关文章 ecm_brand:存放的是商城的

ECMALL目录结构设置与数据库表

最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛连二次开发板块都没有,都在哪瞎扯淡,广告一堆.可悲~~~ 自己做了一张图片,根据ecmall的程序结构图,可以清楚的知道ecmall的五脏六腑. ECMALL数据库主要表 ecm_acategory:存放的是商城的文章分类. ecm_address:存放的是店长的地址 ecm_article:存放的是商城的相关文章 ecm_brand:存放的是商城的

源代码管理工具(下)-SVN目录结构

正规项目的SVN目录结构一般有3个文件夹:trunk:主干,当前开发项目的主目录branches:分支目录,添加非主线功能时使用,开发测试之后,可以合并到主干项目中tags:标记目录,通常作为重大版本的备份 在svn服务器上再次创建一个仓库,这个仓库死真正的仓库,包含了trunk.branches.tags三个文件夹,模拟开发.修复bug.合并版本的流程. 1.创建仓库 2.命名仓库 3.初始化仓库: 4.访问设置: 5.仓库创建成功,预览URL: 6.查看创建的三个文件夹: 7.接下来,根据项

02_Weblogic课程之安装篇:RedHat下JDK安装,RedHat下Weblogic安装,目录结构,环境变量设置

 1  Weblogic的安装方式有三种: 一.GUI方式安装    (java –jar wls1035_generic.jar [-mode=gui])这是默认的 二.Console方式安装   (java –jar wls1035_generic.jar –mode=console) 三.Silent方式安装(静默方式) :这种方式不需要认为干预,默认安装的,适合作集群的时候使用,需要一个配置文件    (java –jar wls1035_generic.jar –mode=sile

综述------>机器学习管理平台项目------->目录结构

1.maven java web工程标准目录结构 2.后续添加(项目名/src/mian/webapp目录下的文件) 都是view层相关文件(包括image.html.css.js.jsp等) 参见博客添加开源view模板(网站门户.登录界面.后台管理界面)到自己的web project

saltstack管理五之saltstack的目录结构

saltstack的目录结构 描述: 当我们在学习自动化运维工具时,不论是puppet还是saltstack,要想熟练使用,必须先弄清楚他们的目录结构,总体来说:puppet和salt的目录结构是很相似的 第一部分: file_roots配置管理的目录结构: 前提: 使用配置管理的目录结构,首先要在配置文件里配置: vi /etc/salt/master 找到file_roots,大约在31行 添加: file_roots: base: - /srv/salt /etc/init.d/salt-