VS单解决方案多项目多DLL多exe管理

您所在的位置:网站首页 vs怎么生成exe可执行文件 VS单解决方案多项目多DLL多exe管理

VS单解决方案多项目多DLL多exe管理

2024-05-27 16:47| 来源: 网络整理| 查看: 265

说明

假设:一个解决方案包括一个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.

pic1

在解决方案资源管理器中,右击解决方案,添加三个解决方案文件夹,分别命名为:Engine,Third,Game

 

创建多个子项目

在Engine解决方案目录新建Engine项目,放置到Engine文件目录下

选择vc++->空项目

pic2

 

在Third解决方案目录新建Pro1,Pro2,Pro3项目,放置到Engine文件目录下,项目模版也是空项目

 

在Game解决方案目录新建Sampler项目,放置到Game文件目录下

选择vc++->空项目,去掉预编译头选项

 

最终解决方案列表如下:

pic3

 

配置各个解决方案

通用配置

Engine:

选中Engine项目右键属性

配置常规中的:

输出目录为:$(SolutionDir)Binaries\Win64\

中间目录为:$(SolutionDir)Temp\$(ProjectName)\

目标文件名为:$(ProjectName)_d

目标文件扩展名为:.dll

配置类型:动态库(.dll)

pic4

 

这一步Pro1,Pro2,Pro3与Engine完全相同,如法炮制.

 

Sampler稍有不同的是:

pic5

 

 

 

编写测试代码

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