***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

***************************************************

解决方案与项目:

从VC6之后VC系列就使用解决方案(Solution)来替代原来的工作空间,用于组织和管理多个相关的项目(Project
文章首先演示一个虚拟的解决方案和我们期望得到的目录结构,然后使用VC2008的项目设置功能来一步一步达到我们的需求。

虚拟解决方案:
该虚拟解决方案名为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 2008并不会自动为我们做好上面所有的事情。不过我们并不需要编写复杂的编译脚本(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)\
这样就大功告成了,现在你就可以编译该执行程序并进行调试。

备注:此文不是适合所有项目,不过利用Visual Studio里面的宏定义和生成事件确实可以更好的组织项目目录结构,转载以备查阅。

[转]VisualStudio如何组织解决方案的目录结构相关推荐

  1. Vs 2008 解决方案的目录结构设置和管理

    Vs 2008 解决方案的目录结构设置和管理 转载:http://www.cnblogs.com/wuqi924/archive/2010/12/03/1895244.html 解决方案与项目: 从V ...

  2. [转]Vs解决方案的目录结构设置和管理

    [转]Vs解决方案的目录结构设置和管理 参考文章: (1)[转]Vs解决方案的目录结构设置和管理 (2)https://www.cnblogs.com/dybk/p/8143461.html 备忘一下 ...

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

    Visual Studio解决方案的目录结构设置和管理 参考文章: (1)Visual Studio解决方案的目录结构设置和管理 (2)https://www.cnblogs.com/CHNMurph ...

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

    一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档.除此以外,根据项目的需求,还会使用一些第三方的库. 所以为解决方案 ...

  5. VS2005解决方案的目录结构

    在本地文件系统: C:\MyApp     \MyApp.sln        \Source           \MyAppWeb           \ClassLibrary1 在源代码管理系 ...

  6. Visual C++ 设置适合自己的解决方案目录结构

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Visu ...

  7. Unity项目如何组织目录结构

    前言 组织好项目的目录结构,是维护项目的很重要的一个点,我们学习别人源码,了解别人的设计思路都是从目录结构开始,一个清晰的目录结构,对项目开发维护,项目管理来说非常的重要,目录维护的好,大家在一起工作 ...

  8. Unity项目如何组织目录结构,有几个习惯与你相同

    前言 组织好项目的目录结构,是维护项目的很重要的一个点,我们学习别人源码,了解别人的设计思路都是从目录结构开始,一个清晰的目录结构,对项目开发维护,项目管理来说非常的重要,目录维护的好,大家在一起工作 ...

  9. 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构

    先看一下我的解决方案的目录结构吧--- 一:先把Controller程序提取出来 默认的情况是所有的****Controller.cs文件都会放在Web程序集下的一个叫Controllers的文件夹下 ...

最新文章

  1. 员工执行不力,换人还是换制度?
  2. Mac系统安装Aircrack-ng破解wifi密码(2)
  3. golang中go mod使用第三方包
  4. vim E492: Not an editor command: ^M
  5. Katas编写的Java教程:Mars Rover
  6. 可执行程序加载到内存的过程
  7. 【JAVA 第三章 流程控制语句】课后习题 判断用户输入的数是否为质数
  8. Soul网关源码阅读(八)路由匹配初探
  9. UVA 993 Product of digits
  10. IM在线聊天-微聊即时通讯完整源码
  11. spark-sql 方差和标准差
  12. 爬取站大爷的免费ip代理
  13. 中职计算机教师试讲技巧,中职教师资格面试原来是这样考的的!
  14. Java解析Lrc歌词
  15. ubuntu 关闭系统自动更新
  16. 最速下降法求解函数极小值原理
  17. 读代码比写代码难,真的?
  18. 126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货
  19. wxWidgets教程(14)——书签控件wxBookCtrl
  20. STM32移植lvgl遇到的bug(坑)

热门文章

  1. 修改jquery文件上传插件uploadify的英文为中文
  2. Xampp配置本地域名及常见错误解决
  3. 关于 mahout factorize-movielens-1M.sh 执行
  4. Sublime text 入门学习资源篇及其基本使用方法
  5. 我的学习工作经历,一个园林专业中专毕业生的IT之路
  6. 安装Orchard错误
  7. Code Chef December Challenge 2018题解
  8. 摩拜大数据杀熟?官方:老用户押金的确退款延迟
  9. 图片格式转换工具与方法
  10. 基于物理的渲染-用真实的环境光照亮物体