一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。
所以为解决方案设置一个合理的目录结构,不但可以使得代码管理更井井有条,项目成员之间也更容易相互配合,更重要的是能够使得最终应用程序的安装包制作,源代码打包发布和转移变得十分容易。
解决方案与项目:
从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)\
这样就大功告成了,现在你就可以编译该执行程序并进行调试。

转载于:https://www.cnblogs.com/Dageking/p/4234834.html

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

  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. VC++2005项目的目录结构设置

    2019独角兽企业重金招聘Python工程师标准>>> VC++2005项目的目录结构设置 作者:flyfish 2010-03-23 星期二 为了方便程序的打包和代码转移,需要手动 ...

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

    [Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛 ...

  6. python项目结构图_python 项目目录结构设置

    为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性.如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂. 下图是一个示例项目的目录结构: 1,bi ...

  7. [转]VisualStudio如何组织解决方案的目录结构

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

  8. Hadoop - YARN NodeManager 剖析、NodeManger内部架构、分布式缓存、目录结构、状态机管理、Container 生命周期剖、资源隔离

    一 概述 NodeManager是运行在单个节点上的代理 ,它管理Hadoop集群中单个计算节点,功能包括与ResourceManager保持通信,管理Container的生命周期.监控每个Conta ...

  9. Python项目目录结构设置

    JAVA有标准的maven目录结构,GoLang也有建议的目录结构,那么Python是不是也应该有一个比较好的目录结构组织方式呢? 为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的 ...

最新文章

  1. 字符串转换为整数的源码atoi()
  2. zabbix服务端远程执行命令
  3. gdb调试时调用函数、设置观察点以及GDB的宏
  4. Barefoot和Stordis在欧洲领导开源网络
  5. sql插入数据的方式
  6. Mac Spark 安装
  7. xxl-job分布式任务调度平台
  8. JavaScipt设计模式初探-代理模式(一)
  9. DIY装机用单条8GB还是2条4GB双通道内存好?选错当心速度会变慢!
  10. WebRTC[52] - WebRTC 带宽分配逻辑详解
  11. Windows应急响应 -Windows日志排查,系统日志,Web应用日志,
  12. IDEA全局代码格式化
  13. 数据结构(三)打印二叉树中结点层次遍历序列的实现
  14. 学计算机买笔记本是i5 i7,i7一定比i5强?买电脑陷阱你一定要注意了
  15. HDU 4123 树状DP+RMQ
  16. AST的一次简单尝试
  17. 在线观看视频解决音频不同步
  18. python zip暴力破解
  19. 手机QQ资料html,手机怎么把QQ资料卡弄成空白 QQ资料清空教程
  20. python爬虫进阶-每日一学(字体反爬-移花接木)

热门文章

  1. C#代码生成目录树(转)
  2. Dubbo使用Sentinel来对服务进行降级与限流
  3. 怎么打开/查看MySQL的SQL记录
  4. salesforce 零基础学习(十八)WorkFlow介绍及用法
  5. [Spring实战系列](8)Spring注入方式之setter注入
  6. java中关于时间的格式化
  7. android 如何实现连接蓝牙打印机来实现打印功能
  8. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)...
  9. opencv3和qt5计算机视觉应用开发pdf_NeurIPS 2019:计算机视觉论文回顾
  10. 推荐系统基础之介绍入门篇