从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)\
这样就大功告成了,现在你就可以编译该执行程序并进行调试。
相关推荐
这份名为"信息化系统建设解决方案(目录结构模板).docx"的文档提供了一个全面的模板,涵盖了从项目概述到具体设计细节的多个方面。 在文档中,我们可以看到以下关键知识点: 1. **项目概况**: - **项目背景**:...
文档还探讨了非结构化数据管理的各种应用实践,如内容协作和交互、内容全生命周期管理、统一的内容数据管理平台、内容的知识化平台、内容归档和合规管理、电子文档安全管理、文档云应用解决方案等。 随着企业对数据...
南北财务管理系统解决方案是基于财务管理系统解决方案的架构和技术方案,提供了一整套的财务管理解决方案。该解决方案包括财务管理系统应用模块、预算管理系统、集成总帐处理系统、智能财务工作台等多个模块。 财务...
用友主数据管理解决方案是企业级的主数据管理解决方案,旨在帮助企业解决主数据管理问题,提高业务效率和决策效率。该解决方案通过集成多个系统和数据库,提供统一的主数据视图,帮助企业掌握客户、产品、供应商、...
访客管理系统解决方案的主要目标是为了提高访客管理的效率和安全性。该系统旨在提供一个安全、可靠、高速的访客管理解决方案,以满足不同行业和单位的需求。 系统架构 访客管理系统解决方案的系统架构主要包括以下...
标签"vs项目与解决方案"进一步确认了内容的焦点,表明压缩包可能包含了示例项目或教程材料,帮助用户了解如何在VS2008中管理和操作项目与解决方案。 至于压缩包子文件的文件名称列表只给出了"ch7",这可能表示该...
《天翼云高级解决方案架构师参考题库》涵盖了IT基础设施、云服务管理、高可用性设计、网络资源、教育云解决方案以及高校上云等多个领域的知识。以下是对这些知识点的详细阐述: 1. IT基础设施通常由计算、存储和...
本资源摘要信息将从华为制造业数据治理、数据管理与数据中台架构解决方案PPT.pptx中提取相关知识点,总结了数据治理、数据管理、数据中台架构等方面的重要概念和技术。 一、数据治理 * 数据治理是指对组织内所有...
首先,我们要理解解决方案模板的基本结构。一个完整的软件解决方案通常包括以下几个部分: 1. **封面**:包含项目名称、公司Logo、作者信息以及日期,有时还会包括项目的关键参与方。 2. **摘要**:简述问题背景、...
金属物流仓储管理系统解决方案是杭州追云软件有限公司开发的一款专业的仓储管理系统,旨在帮助金属仓储企业实现信息化管理和仓储管理标准化。该系统提供了全面的仓储管理功能,具有多种特点,例如高效、灵活、可靠、...
智慧校园解决方案是指通过信息技术和智能化手段,提高学校教学、管理和服务的效率和质量的一系列解决方案。下面是智慧校园解决方案的详细知识点: 一、智慧校园解决方案概述 智慧校园解决方案是一种基于信息技术和...
(1)总体设计:知识产权管理系统解决方案的总体设计是指该项目的总体设计方案,包括知识产权管理系统的总体架构、功能模块和技术架构等。 (2)详细设计:知识产权管理系统解决方案的详细设计是指该项目的详细设计...
统一用户管理解决方案的架构主要包括以下几个部分:(1)用户目录管理:用户目录管理是统一用户管理解决方案的核心部分,负责存储和管理用户信息。(2)身份认证:身份认证是统一用户管理解决方案的重要组成部分,...
物流解决方案系统架构图是设计和实施物流管理信息系统的关键部分,它描绘了整个系统的组件、流程、数据和交互方式。在本文中,我们将深入探讨物流解决方案系统架构的主要元素、设计原则以及它如何支持高效的物流运营...
认证解决方案架构师负责设计和部署在AWS上运行的应用程序,这要求具备对AWS服务和架构模式深入的理解。 本书涵盖了与AWS认证解决方案架构师(Associate级别)考试相关的核心概念和知识点。考试编号为AWS-Associate-...
资金管理解决方案的架构主要包括集中监控、资金预算平衡、资金需求、资金结算处理、财务核算、信贷业务、风险监管和决策分析等模块。这些模块之间紧密合作,确保企业的资金管理更加高效、安全和智能。 三、集中监控...
IT服务管理解决方案是针对企业的信息技术部门,旨在优化和标准化其服务交付过程,确保高质量、高效和经济的IT支持。BMC公司作为国际领先的IT服务管理提供商,其解决方案涵盖了ITIL(信息技术基础设施库)的各个关键...
软件体系结构是指解决方案的软件架构和组件设计,系统逻辑视图是指解决方案的逻辑架构和数据流设计,系统接口设计是指解决方案的外部接口和内部接口设计,系统整体应用模式是指解决方案的应用模式和使用场景,子系统...