VS单解决方案多项目多DLL多exe管理 |
您所在的位置:网站首页 › vs怎么生成exe可执行文件 › VS单解决方案多项目多DLL多exe管理 |
说明
假设:一个解决方案包括一个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 #pragmaonce class__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)- arg3 intAddAndSub(int arg1, int arg2,int arg3); //(arg1+arg2)* arg3 intAddAndMul(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 #include #pragmacomment(lib,"Engine_d.lib") intmain() { Engineeng; std::cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |