所以我的项目看起来像这样:

游戏(exe)
核心(lib)
阿辛普(lib)

我将Assimp链接到Core内。我在那里创建了一个包含assimp标头的类。
游戏链接核心。
现在,如果我在使用assimp标头的类的Game中创建一个对象,则它说找不到标头文件。

那么如何使它起作用,这样我就不必在游戏中链接assimp了?

最佳答案

链接静态库和包含项目的标题之间是有区别的:
 C++ : Difference between linking library and adding include directories

您说您已经在核心内部链接了assimp,但这是不可能的,静态库需要链接到使用它的可执行文件中,但是它们不能链接其他静态库。
我猜您的意思是您在核心项目中包含了assimp的头文件,这是正确的,但是,如果您通过核心项目公开了任何assimp API,那么您还需要在其他任何包含以下内容的项目中包括assimp头文件:使用核心。如果您想避免这样做,则可以通过仅在.cpp文件中包含assimp标头来隐藏assimp API。

游戏项目还需要链接BOTH core和assimp,无论它们都需要链接到最终可执行文件中,

Microsoft关于使用静态库的说法:
https://msdn.microsoft.com/en-us/library/ms235627.aspx

简要说明一下:

核心项目头文件core.h

#include <assimp.h>


游戏头文件game.h

#include <core.h>


现在,当在游戏项目中包含core.h时,还包括了assimp.h,这意味着游戏需要知道assimp.h的位置。

10-08 08:59