【问题标题】:Set up Visual studio library project dependencies设置 Visual Studio 库项目依赖项
【发布时间】:2017-04-06 19:30:59
【问题描述】:

鉴于以下情况,我正在努力寻找在 Visual Studio(即 2015)中设置依赖项的正确方法:

我有 2 个项目:

  • Engine:它是一个静态库项目,依赖于我在“Librarian”、“Additional dependencies”部分中指定的 glfw、glew 和 opengl .lib 文件。我还正确添加了 include 和 libs 目录。
  • Game:它应该只能访问 Engine 项目提供的 API,所以我将 Engine headers 目录添加到 Game 包含目录,生成的 Engine.lib 与附加库目录相同。

到此阶段,Engine 项目编译成功。

我希望 Game 项目也能工作,但是当我尝试使用简单的 main.cpp 编译该项目时,编译器显示此错误(引用来自 Engine 项目的文件):

-- 错误 C1083 无法打开包含文件:'GL/glew.h':没有这样的文件或目录

我不想在我的游戏项目中包含 opengl、glew 和 glfw 库以及包含目录,因为用户不应访问此 API。

那么...实现这一点的正确方法是什么(越简单越好)?

提前致谢

【问题讨论】:

  • 如果Game 中的文件包含Engine 中的头文件,则includes GL/glew.h 则间接GL/glew.h 包含在该文件中。解决此问题的一种方法通常是将此类包含移动到Engine 的源文件中,并尽可能删除标题中的include。这样它只会被使用它的文件包含,而不是被每个使用该标题的文件包含。
  • 我猜这是唯一可以接受的选项。但是,这意味着我的代码架构中需要进行一些小的设计调整,因为此标头 (GL20.h) 映射了所需的常量,例如“GL_VERTEX_SHADER”或“GL_FRAGMENT_SHADER”,它们作为常量表达式包含在标头 ShaderProgram 中的枚举(着色器类型)中。 h...如果我将其定义更改为 GL20.cpp,则它们不能用作上述枚举中的常量表达式。 (在其他一些变化中)。感谢您的帮助!

标签: c++ visual-studio opengl static-libraries glew


【解决方案1】:

将静态库链接到同一解决方案中的另一个项目的步骤:

如果您的 Engine 项目还没有,请将其设为库。构建它。

右键单击您的解决方案或您的一个项目,然后转到Build dependencies -> Project dependencies。在下拉列表中选择您的 Game 项目,然后选中 Engine 旁边的框。这会让编译器知道Game 不能在没有Engine 的情况下启动。

转到您的"Game" project properties -> C/C++ -> General -> Additional include directories,确保您的Engine 项目的头文件位于此处。

转到C/C++ -> Code Generation,确保两个项目在调试和发布时使用相同的运行时库。

转到 "Game" Project properties -> Linker 并将您的其他项目的 lib 文件的位置放在这里。

转到Linker -> Input 添加Engine.lib 或等效于此列表。

您应该有一个链接到库的项目。如果这没有帮助,请回复我的回复。

【讨论】:

  • 这并不能解决问题,因为游戏中缺少 glew 头文件,而不是引擎头文件。
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2010-10-14
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多