vs的多工程配置概述(转)

摘要:
2.将所有必需的dll复制到VS项目目录或可执行文件所在的目录:此方法也很简单,但如果您有多个项目,则每次更新SDK及其dll文件时都需要更新所有项目。这不符合文件唯一性的工程标准。

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

date:2018.07.17

转自:My Repository

虚拟解决方案:GMA

包含:动态链接库项目ChocolateMilk

   应用程序项目PureMilk

需要:第三方库log4cxx——由于以动态库方式编译,因此还需要相应头文件.h、导入库.lib和动态链接库.dll。

目录结构图抄过来。。

vs的多工程配置概述(转)第1张

注:1. GMA是解决方案目录;

  2. PureMilk 和 ChocolateMilk 是项目目录;

  3. Lib目录存放导入库或静态库(包括第三方的导入库与自己的项目的静态库);

  4. Include目录存放第三方库的头文件;

  5. Bin目录存放所有的动态链接库和执行文件(包括第三方的和自己项目生成的),区分Release 和 Debug版本。另外,程序运行过程中需要外部的数据文件呢和启动时需要的配置文件等都可以放于该目录下;

  6. Temp目录用于存放临时生成的文件;其中Compile存放编译器编译时生成的.obj文件;Link存放链接器的输出文件;

——————————————————

制作安装包时,我们只需要将“../GMA/Bin/Release/”目录下的所有文件打包;

发布和转移源码时,我们可以打包除了Temp目录以外的所有“../GMA/”目录下的内容(如果不需要执行档,也可不包括Bin);

——————————————————

为了得到目录结构清晰明了的项目,只需要简单的修改项目的缺省设置即可。

1.使用“/GMA/Temp/Compile/”作为项目编译时使用的中间目录

配置属性 -> 常规 -> 中间目录:$(SolutionDir)TempCompile$(ProjectName)$(ConfigurationName);

2.使用“/GMA/Temp/Link/”作为项目链接的输出目录

配置属性 -> 常规 -> 输出目录:$(SolutionDir)TempLink$(ProjectName)$(ConfigurationName);

3.当项目是应用程序时,在构建结束后拷贝执行文件到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,当项目是动态链接库时,除了拷贝dll到Bin,还拷贝导入库到“/GMA/Lib/”;

4.当项目是应用程序时,调试时运行“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”下面的执行文件,并以“/GMA/Bin/Debug/”或“/GMA/Bin/Release/”为工作目录;

首先看一下项目设置中可以使用的宏,常用的有:

vs的多工程配置概述(转)第2张

宏的定义可以在编译后在属性页里点击vs的多工程配置概述(转)第3张查看。

3. 构建结束后拷贝动态链接库到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,拷贝导入库到“/GMA/Lib/”;

我们通常都会在Debug版本的输出库后面加上字母“d”以表示这是Debug版本,在Debug配置下,修改导入库:

 Debug -> 链接器 -> 高级 -> 导入库:$(TargetDir)$(TargetName)d.lib;

VC可以让我们设置构建前后执行的脚本程序,所以为了完成3,我们需要写构建后执行的脚本:

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;

4. 调试运行前,需要修改命令和工作目录:

调试 -> 命令:$(SolutionDir)Bin$(ConfigurationName)$(TargetFileName)

调试 -> 工作目录:$(SolutionDir)Bin$(ConfigurationName)

这样就搞定了。

____________________________________

vs的多工程配置概述(转)第4张

这里出现了错误,原因是VS的生成事件并不会去主动建立文件夹,因此我们需要预先准备好文件夹路径

————————————————————

另外,

开发过程中,应该选择哪种方式链接静态库lib和动态库dll呢?

感谢木木ing

由于工程中经常会需要加载一些动态链接库dll文件,进而来使用第三方库进行调试。

这些动态链接库,往往都是测试版本或是开发中的版本,或者会有若干个版本;这个时候,如果直接把 dll 所在目录加到 PATH 里,则会有潜在冲突的危险;如果直接拷贝到 Visual Studio 的目录下,假如测试工程太多,每次有新版本的动态链接库更新时,你需要更新若干次,拷贝、粘贴苦不堪言。

可参考MSDN: Working with Project Properties

总体上来说,有几种方法可以改变 Visual Studio 的环境变量设置

1. 修改系统环境变量PATH:

这个方法最简单,也最直接,但是坏处是它更改的是全局的PATH设置,尤其是你包含着大量测试用的dll时。

2. 把所有需要的dll拷贝至VS的工程目录下,或可执行文件文件所在的目录(默认情况是Debug / Release文件夹,也可能被修改位Bin文件夹)下:

这个方法也很简单,但是当你有若干个工程时,你每次更新 SDK 及其 dll 文件,你就要把所有的工程都更新,这个不符合文件唯一性的工程性准则。

3. 在属性页的配置属性 -> 可执行目录中添加dll所在的目录;(我不知道为什么有时还是提示找不到dll的问题,是不是改这个没有用???请大佬指示

4. 在属性页的配置属性 -> 调试 -> 环境里修改,具体怎么用我还没有试过。等有时间玩玩。8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 

免责声明:文章转载自《vs的多工程配置概述(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gcc常用指令及相关知识zabbix配置ldap域账号登录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL基于Amoeba实现读写分离

在实际的生活环境中,如果对数据库的读和写都在同一个数据库服务中操作,无论是在安全性,高可用还是高并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制的方式来同步数据,再通过读写分离来提升数据的高并发负载能力这样的方案来进行部署。 读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select...

Centos7基本命令

shell基本命令 linux命令行的组成结构 linux系统命令操作语法格式 命令 空格 参数 空格 文件路径或者需要处理的内容 rm -rf /tmp/* ls -la /home 1.一般情况下,【参数】是可选的,一些情况下【文件路径】也是可选的 2.参数》同一个命令,跟上不同的参数执行不同的功能...

IIS6目录解析漏洞的实验

​​​​​​​​​​Windows 打开IIS管理器的方式 这个是网站IIS网站目录右击默认网站中的属性,可以查看网站的属性,比如网站根目录,或者是端口这个是网站的目录C:www,有三个文件分别是file文件夹,index.asp,upload.asp。其中Index.asp是上传文件的地方,upload.asp是处理上传文件,最后一个file文件夹是存放上...

配置文件入门 WebConfig.config常用配置节点介绍

  一、配置文件入门   .Net提供了一种保存项目配置信息的办法,就是利用配置文件,配置文件的后缀一般是.config。在WinForm程序中配置文件一般是App.config。在Asp.net中一般默认是web.config。   一个.config配置文件都是基于XML的文本文件,并且可以保存到Web应用程序中的任何目录中。在发布Web应用程序时we...

基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署

前文已经说过,OPC基于微软的DCOM技术,所以开发OPC服务器我们要做的事情就是开发一个基于DCOM的EXE文件、一个代理/存根文件,然后就是写一个OPC客户端测试一下我们的服务器了。对于第一项工作,我们需要借助一个俄罗斯大神开源的OPC开发库——LightOPC展开。不过,从LightOPC的主网站看,这个库已经许久没更新了,时间定格在了2004年:...

Oracle 与 iptables 和 SELinux 禁用关系 说明

本文转自Oracle ACS 团队Steven.Lee的blog,链接如下: http://www.dbaleet.org/is_disable_iptables_and_selinux_to_be_mandatory/ 在刚开始学习Oracle的时候,很多老鸟告诉我应该关闭操作系统的iptables和SELInux,因为Oracle不支持, 否则会...