如何在vs中设置多个项目,以及如何创建一个能在所有项目中使用的库
51创建并使用库#
先以Game51命名创建一个项目
文件夹查看
再新建一个项目,项目名为Engine

此时

现在确保设置Game51为应用程序

Engine项目配置为静态库

创建文件夹及文件#
show All Files

目录结构

(静态链接库)Engine项目#
//src/Engine.h
#pragma once
namespace engine {
void PrintMessage();
}
//不能这么写,说明:: 被称为作用域解析运算符。它的逻辑
// 是:你只能引用一个已经存在的名字空间。而这里正在定义
//所以不存在
//void engine::PrintMessage();
///src/Engine.cpp
#include "Engine.h"
#include <iostream>
namespace engine {
void PrintMessage()
{
std::cout << "Hello World!" << std::endl;
}
}
//或者这么写
//void engine::PrintMessage()
//{
// std::cout << "Hello World!" << std::endl;
//}
(使用静态链接库)Game51项目中#
处理头文件的两个方法#
//Application.cpp
//添加头文件-方法1
//#include "../../Engine/src/Engine.h"
//直接声明-方法0
//namespace engine {
// void PrintMessage();
//}
int main()
{
engine::PrintMessage();
}处理头文件的第3个方法#
右键项目Game51属性修改
#include <iostream>
//添加头文件-方法3,还要配合项目属性additional include directory
#include "Engine.h" //解决方案内的推荐用""
//#include <Engine.h> //如果是解决方案外的推荐用<>
int main()
{
engine::PrintMessage();
std::cin.get();
}目前编译成功
处理链接库#
方法1#

对Engine项目右键build,然后直接设置静态链接库目录

设置依赖的库文件

方法2#
这两个地方不处理

然后在Game51项目右键Add-Reference

选中后确定
现在再build解决方案,就会把库文件链接到我们的可执行文件里,就像我们已经把他添加到链接或输入里了
好处
- 如果使用方法1,如果Engine的名字改了,那么Engine.lib名称也会改,则需要在Game51项目右键中,修改
AdditionalDependences。而此方法2会自动搞定 - 如果Engine项目内部有变动,我们编译Game项目时, 会先编译Engine,之后再编译Game
这里做了个测试,把项目Engine Clean了,那么此时build 项目Game,则出现
Build started at 23:02...
1>------ Build started: Project: Engine, Configuration: Debug x64 ------
1>Engine.cpp
1>Engine.vcxproj -> E:\cppStudyTemp\ChernoCpp\Game51\x64\Debug\Engine.lib //这里自动编译了Engine,因为Game添加了engine reference
2>------ Build started: Project: Game51, Configuration: Debug x64 ------
2>Game51.vcxproj -> E:\cppStudyTemp\ChernoCpp\Game51\x64\Debug\Game51.exe
========== Build: 2 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 23:02 and took 04.672 seconds ==========结束#
- 如果把Game.exe直接拖动到任意的其他文件夹,双击依然可以运行,因为它是静态链接Engine
- 在vs中能有多个项目,很实用。因为如果我们真的在构建一个游戏引擎,我们这个解决方案可能有好几个使用该引擎的示例,或者几个游戏之类的,他们都引用那个引擎文件/殷勤项目,所以我们要对其进行模块化,这样我们就能让所有核心代码都集中在一个项目,这样我们的所有示例、可执行文件都与那个集中式项目关联