^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
date:2018.07.17
转自:My Repository
虚拟解决方案:GMA
包含:动态链接库项目ChocolateMilk
应用程序项目PureMilk
需要:第三方库log4cxx——由于以动态库方式编译,因此还需要相应头文件.h、导入库.lib和动态链接库.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);
——————————————————
为了得到目录结构清晰明了的项目,只需要简单的修改项目的缺省设置即可。
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/”为工作目录;
首先看一下项目设置中可以使用的宏,常用的有:
宏的定义可以在编译后在属性页里点击查看。
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的生成事件并不会去主动建立文件夹,因此我们需要预先准备好文件夹路径。
————————————————————
另外,
开发过程中,应该选择哪种方式链接静态库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