设置Visual Studio库项目依赖关系

5
我正在努力找出在Visual Studio(即2015)中设置依赖项的正确方法,以下是情况:
我有两个项目:
引擎:它是一个静态库项目,依赖于我在“图书馆员”,“其他依赖项”部分中指定的glfw、glew和opengl .lib文件。我也正确地添加了包含和库目录。
游戏:它应该只能访问引擎项目提供的API,所以我将引擎头文件目录添加到游戏包含目录中,并将生成的Engine.lib与其他库目录一起添加到游戏项目中。
此时,引擎项目成功编译。
我希望游戏项目也能正常工作,但是当我尝试用简单的main.cpp编译此项目时,编译器显示此错误(引用来自引擎项目的文件):
-- 错误C1083 无法打开包括文件:'GL/glew.h':没有那个文件或目录
我不想在我的游戏项目中包含opengl、glew和glfw库和包含目录,因为用户不应该访问此API。
那么...如何达到这个目的(越简单越好)?
先行致谢

3
如果Game中的一个文件包含一个Engine的头文件,该头文件中又include了GL/glew.h,那么间接地这个文件也包含了GL/glew.h。解决这个问题的方法通常是将这样的include移到Engine的源文件中,如果可能的话则删除头文件中的include。这样,它只会被使用它的文件包含,而不是每个使用该头文件的文件都会包含它。 - mascoj
我想这是唯一可接受的选项。然而,这意味着我的代码架构需要进行一些小的设计调整,因为这个头文件(GL20.h)映射了一些必需的常量,比如“GL_VERTEX_SHADER”或“GL_FRAGMENT_SHADER”,它们作为常量表达式包含在一个名为ShaderProgram.h的头文件中的枚举(着色器类型)中...如果我将其定义更改为GL20.cpp,则无法在上述枚举中使用它们作为常量表达式。(还有其他一些更改)。感谢您的帮助! - omniyo
1个回答

3
以下是将静态库链接到同一解决方案中其他项目的步骤:
1. 如果尚未完成,请将您的“Engine”项目设置为库。然后进行构建。
2. 右键单击解决方案或其中一个项目,然后选择“生成依赖项 -> 项目依赖项”。在下拉菜单中选择您的“Game”项目,然后选中“Engine”旁边的复选框。这样编译器就知道“Game”不能在没有“Engine”的情况下启动。
3. 转到您的“Game”项目属性-> C/C++ -> General -> Additional include directories,确保此处具有您的“Engine”项目头文件的位置。
4. 转到C/C++ -> Code Generation,确保两个项目在调试和发布时都使用相同的运行时库。
5. 转到“Game”项目属性-> Linker,并在此处放置另一个项目的lib文件位置。
6. 转到Linker -> Input,将"Engine.lib"或等效内容添加到此列表中。
现在您已经成功地将库链接到项目中了。如果仍有问题,请回复我的回答。

1
那不会解决问题,因为游戏中缺少glew头文件而不是引擎头文件。 - BDL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接