解决方案与项目:
从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)\
这样就大功告成了,现在你就可以编译该执行程序并进行调试。
分享到:
相关推荐
ZZ经济开发区水司智能水表网络管理系统解决方案 本解决方案旨在为ZZ经济开发区水司提供一套智能的水表网络管理系统,该系统基于高新技术,旨在改变城市传统供水管理的机电一体化计量仪表。下面是该解决方案的详细...
面对日益激烈的市场竞争和技术挑战,集团决定引入SAP解决方案来优化内部管理和提升运营效率。 #### 二、整体解决方案与业务改善点 整体解决方案涵盖了项目的各个关键环节,包括但不限于项目准备、蓝图设计、系统...
工程车辆集团在数字化转型过程中采用的SAP解决方案主要涵盖了企业经营管理、全链路订单管理、营销创新、产品配置、交付能力、管理精细化、管控模式优化以及数字工厂管理等关键方面。下面将详细说明这些知识点。 ...
- **生命周期管理**:从产品的设计阶段到最终的服务阶段,SAP解决方案能够帮助企业全面跟踪和管理产品的整个生命周期。 - **系统层级集成**:从底层的设备层、控制层到高层的企业层和协同层,SAP解决方案能够实现跨...
### 智慧农业解决方案知识点概述 #### 一、智慧农业背景及思考 ##### 农业信息化背景 随着科技的进步和社会的发展,农业信息化已经成为现代农业发展中不可或缺的一部分。它不仅改变了传统的农业生产方式,还促进了...
综上所述,智慧化工园区解决方案通过集成多种先进技术,实现了园区管理和服务的高度智能化。该方案不仅提高了园区的安全性和环保水平,还增强了其经济竞争力和服务质量,对于推动化工行业的可持续发展具有重要意义。
《zz809.com留言本》是一款基于网络的互动交流平台,源于...对于有经验的开发者,它则提供了探索和改进现有解决方案的机会。通过下载和研究这个源码,我们可以深入理解网络留言系统的构建原理,提升自己的编程能力。
该报告从网站需求分析开始,讨论了ZZ不锈钢制品公司的电子商务解决方案和服务需求,并对网站的设计要求、功能实现、中心网络平台模型、网站系统内容设计、网站架构、网站推广模型等方面进行了详细的讨论。...
综上所述,水泥行业智能工厂解决方案旨在通过一系列的技术革新和管理优化措施,从根本上解决传统水泥生产中存在的问题,实现从原料到成品的全过程智能化管理,进而推动整个行业的转型升级和发展。
如果项目涉及到安全控制,`atguigu_springboot2_zz-master`可能使用了Spring Security进行身份验证和授权,提供了一套完整的安全解决方案。 11. **RESTful API设计** 作为一个现代Web应用,该项目可能遵循RESTful...
为解决这些问题,报告提出了以下几个可能的解决方案方向: - 重新设计薪酬制度,确保薪酬与员工贡献、市场水平和内部公平性相匹配。 - 制定明确的职业发展路径,提供晋升机会,让员工看到在公司的长期发展前景。 - ...
Android提供了SQLite数据库作为本地数据存储的解决方案,源码中可能包含SQLiteOpenHelper的子类,用于创建、升级数据库和执行SQL查询。此外,应用可能还使用了SharedPreferences来存储用户的偏好设置。 网络通信是...
《Java停车场管理系统:栈与队列的智慧应用》 在当今的城市生活中,停车场管理系统已经成为解决...对于学习Java编程和系统设计的开发者来说,这是一个很好的实践案例,有助于深化对数据结构和实际问题解决方案的理解。
- **结构化流程**:采用结构化的流程管理和决策机制。 - **客户导向**:确保产品满足客户需求。 - **持续改进**:不断优化流程,提升效率和质量。 #### 二、基于ISO9000的IPD流程管理体系 **2.1 产品实现(流程)*...
- **变革管理**:识别并解决变革过程中可能出现的问题,确保员工的接受和支持。 - **风险管理**:识别潜在的风险,并制定相应的预防和应对措施。 #### 五、结论 通过构建财务共享服务中心,XX公司不仅能够提高财务...
根据提供的文件信息,我们可以深入探讨华为市场营销MPR+LTC流程规划方案中的关键知识点,主要包括项目背景、工作方法、未来整体架构(To-be流程架构)、关键变革点的识别与解决方案,以及变革规划等方面。...
【标题】: 官邸物业管理项目建议书 【描述】: 这份文档是一...这份物业管理项目建议书全面涵盖了从项目定位、服务模式、成本预算到管理团队构建的所有关键环节,展示了zz物业的专业水平和对观邸项目的全面规划...
【ZZ人力资源诊断与建议】这份报告揭示了ZZ集团公司房地产开发部在人力资源管理方面存在的主要问题,这些问题主要包括收入不公平和员工缺乏发展动力。报告指出,这两个问题不仅影响员工满意度,还会制约企业的长期...
"zz_doctor"可能包含了这些结构的子目录,开发者需要解压后查看具体文件来详细了解应用的结构和功能。 在Android应用开发中,核心知识点包括: 1. **Android架构**:理解Activity、Service、BroadcastReceiver、...
Bootstrap是Twitter推出的一款开源前端框架,它提供了一套完整的响应式布局、移动设备优先的Web开发解决方案。Bootstrap包括了CSS样式、JavaScript插件和基础HTML元素,使得开发者能够快速构建美观且功能丰富的网页...