VS单解决方案多项目多DLL多exe管理
来源:互联网 发布:前台js调用天气插件 编辑:程序博客网 时间:2024/05/15 21:43
说明
假设:一个解决方案包括一个Game项目目录:下有多个生成可执行程序的game项目,一个引擎Engine项目,引擎依赖多个其他库Pro1,Pro2,Pro3,每个库生成单独的dll,引擎本身也生成dll,Game项目生成exe可执行程序.
准备
文件目录组织
解决方案文件名SolutionTest,其下新建文件夹
Binaries\Win64:所有的dll,lib,exe将生成到这个文件下
Engine:所有的dll项目将创建在这个目录下
Temp:所有的中间文件将保存到这个目录下
Source:所有dlll项目的源程序将保存到这个目录下
Game:所有游戏项目将在这个目录下,其源代码也在其下,执行程序生成到Birnaries\Win64下.
Media:所有公共资源文件放到这个目录下.项目自身资源需要自行管理,建议放到Media下相应文件夹下.
发行项目的方法:
将Media必须资源拷贝到Binaries下,并将Binaries改名为相应发行项目名,即可.
创建解决方案
打开vs,新建项目,选择:模版->其他项目类型->vs解决方案->空白解决方案,命名为SolutionTest.
在解决方案资源管理器中,右击解决方案,添加三个解决方案文件夹,分别命名为:Engine,Third,Game
创建多个子项目
在Engine解决方案目录新建Engine项目,放置到Engine文件目录下
选择vc++->空项目
在Third解决方案目录新建Pro1,Pro2,Pro3项目,放置到Engine文件目录下,项目模版也是空项目
在Game解决方案目录新建Sampler项目,放置到Game文件目录下
选择vc++->空项目,去掉预编译头选项
最终解决方案列表如下:
配置各个解决方案
通用配置
Engine:
选中Engine项目右键属性
配置常规中的:
输出目录为:$(SolutionDir)Binaries\Win64\
中间目录为:$(SolutionDir)Temp\$(ProjectName)\
目标文件名为:$(ProjectName)_d
目标文件扩展名为:.dll
配置类型:动态库(.dll)
这一步Pro1,Pro2,Pro3与Engine完全相同,如法炮制.
Sampler稍有不同的是:
编写测试代码
Pro1项目加入一个Pro1类,有AddInt方法
Pro2项目加入一个Pro2类,有SubInt方法
Pro3项目加入一个Pro3类,有MulInt方法
Engine加入Engine类,有AddAndSub方法,可以看到这个库引用了Pro1,Pro2库
Sampler有主函数,使用Engine,Muler的方法,引用了Engine,Pro3库.
Pro1:
通过类向导,在Source\Pro1\目录下添加类:Pro1
代码如下
//Pro1.h#pragmaonceclass__declspec(dllexport) Pro1{public:Pro1();~Pro1(); intAddInt(int arg1, int arg2); };
问题:为什么class后有__declspec(dllexport)
这是为了让VS同时生成项目的dll和lib文件
//Pro1.cpp略,其方法AddInt就一行代码:return arg1+arg2;
Pro2:
通过类向导,在Source\Pro2\目录下添加类:Pro2
如法炮制
不同的是自定义方法SubInt实现arg1-arg2
Pro3:
通过类向导,在Source\Pro3\目录下添加类:Pro3
如法炮制
不同的是自定义方法SubInt实现arg1*arg2
Engine项目:
添加类:Engine存储到Source\Engine文件目录下
//Engine.h#pragmaonce #include"../Pro1/Pro1.h"#include"../Pro2/Pro2.h"#include"../Pro3/Pro3.h"#pragmacomment(lib,"Pro1_d.lib")#pragmacomment(lib,"Pro2_d.lib")#pragmacomment(lib,"Pro3_d.lib") class__declspec(dllexport) Engine{public:Engine();~Engine(); //(arg1+arg2)- arg3intAddAndSub(int arg1, int arg2,int arg3); //(arg1+arg2)* arg3intAddAndMul(int arg1, int arg2, int arg3);};
//Engine.cpp#include"Engine.h"Engine::Engine(){}Engine::~Engine(){}intEngine::AddAndSub(int arg1, int arg2, int arg3){Pro1p1;Pro2p2;returnp2.SubInt(p1.AddInt(arg1, arg2),arg3);} intEngine::AddAndMul(int arg1, int arg2, int arg3){Pro1p1;Pro3p3;returnp3.MulInt(p1.AddInt(arg1,arg2),arg3);}
Sampler项目添加文件main.cpp到Sampler项目目录下(不是Source目录)
代码:
#include<Engine.h>#include<iostream>#pragmacomment(lib,"Engine_d.lib")intmain(){ Engineeng;std::cout<< "2+3-4 = " << eng.AddAndSub(2, 3, -4) <<std::endl;std::cout<< "(2+3)*4 = " << eng.AddAndMul(2, 3, 4) <<std::endl;return0;}
额外的配置
Engine项目
配置VC++目录:包含目录,加入Pro1,Pro2,Pro3源代码目录
配置库目录为$(SolutionDir)Binaries\
同理配置Sampler项目的包含目录与库目录,包含Engine源代码,库目录相同
测试
一次编译Pro1,Pro2,Pro3,Engine,Sampler项目
并运行Sampler生成的可执行程序
结果如下:
现在可以修改各个子项目而不用迁移发动全身了.
- VS单解决方案多项目多DLL多exe管理
- VS 多项目调试 解决方案 多项目 Silverlight WPF
- Vs 解决方案中多项目引用问题
- SVN多项目多仓库管理
- VS下多项目管理与依赖项目作用
- [VS]dll嵌入exe
- 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案
- 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案
- 产品研发过程常见问题4:多项目管理挑战多
- 多项目管理
- 多项目管理
- 多项目管理
- 多项目管理
- 多项目管理
- SVN 多项目管理
- maven 多项目管理
- maven 多项目管理
- PPHStorm 多项目管理
- Spring的作用域以及RequestContextListener作用
- Android 上传图片到服务器
- ORACLE初识总结
- MD5加密
- opencv创建视屏播放条
- VS单解决方案多项目多DLL多exe管理
- HTML颜色表及html代码(前端必备)
- Spring Scheduler的使用与坑
- Microsoft Office SharePoint Server 2016 备份与恢复解决方案(一,备份准备工作和注意事项。)
- String类型的转换
- Java命令模式
- 局部特征
- 如何利用树莓派打造一款机器人 | 新知 · 科技
- Shopping+在线购物商城的实现(Spring+SpringMVC+Hibernate)(附源码)