C++学习笔记 19 多项目 - 静态链接

一、创建多项目

  1. 创建空项目Game

  2. 在 Solution Game 下add Project: Engine

  3. 在 Show ALl Files模式下 创建src目录

  4. 设置Game 属性:General --> Configuration Type = Application (.exe)

  5. 设置Engine 属性:General --> Configuration Type = Static library (.lib)

  6. Game/src 新增 Application.cpp

  7. Engine/src新增 Engine.h

  8. Engine/src新增 Engine.cpp

  9. 指定Game项目编译器包含目录:Game : C/C++ --> General --> Additional Include Directories: $(SolutionDir)Engine\src (注意:是括号,不是大括号)

  10. 在Application.cpp 中引入Engine.h : #include "Engine.h"

  11. 当前一步项目还没有链接,我们并没有链接到库。build Engine项目,会生成1> Engine.vcxproj -> E:\workspace\CPlusPlusDev\Game\x64\Debug\Engine.lib , 是在整体的Solution解决方案目录下,而不是具体的Engine项目目录下。

  12. Game --> Add --> Reference , 选中 Engine, OK保存。(这会吧Engine.lib文件链接到我们的可执行文件中,就像我们把它添加到链接器输入一样,也给我们提供了额外的好处:除了不用处理链接设置输入文件之外,如果我们改变了Engine项目的名字,比如:Core, 我们需要在链接器设置那里改变名字:Engine.lib --> Core.lib。但如果我们像这样使用Reference,则不需要手动修改,因为是自动关联识别的。)

  13. Engine现在是Game的依赖,意味着Engine内部的某些东西发生了变化,然后我们去编译Game,Games实际上会编译Engine和Game,蓑衣的意思我们总是在编译最新代码,而不是忘记编译Engine,然后各种不能用。

  14. Game Solution 右键 clean Solution,然后 build game, 或build整体的game solution, 会看到首先build Engine,因为依赖它。

  15. 生成Game.exe 文件,即便是被复制到了其他目录,点击运行时也可以运行。因为所有的东西冬放到了这个Game.exe文件中了,没有外部文件依赖。


Engine.h

#pragma once

namespace engine {
	void PrintMessage();
}

Engine.cpp

#include "Engine.h"
#include <iostream>

namespace engine {
	void PrintMessage() {
		std::cout << "Hello World" << std::endl;
	}
}

Application.cpp

#include "Engine.h"
#include<iostream>
int main() {
	engine::PrintMessage();
	std::cin.get();
}

选中Show All Files

posted @ 2025-12-16 13:24  超轶绝尘  阅读(0)  评论(0)    收藏  举报