我最近参与制作了一个基本的游戏引擎。我决定将所有中间件放入Externals
目录,其中bash脚本将我的所有中间件构建到Binaries
目录中的共享对象文件中。
在我的CmakeLists.txt
文件中,我能够将这些库链接到我的主要可执行文件中,如下所示:
add_library (glfw SHARED IMPORTED)
set_target_properties (glfw PROPERTIES IMPORTED_LOCATION
${ENGINE_BINARIES_DIR}/Libraries/Shared/libglfw.so.3.2
)
...
target_link_libraries (Engine glfw)
但是,当我尝试在我的主文件中包含GLFW/glfw3.h
时,它无法编译。这是有道理的,因为没有glfw3.h
文件;然而,将glfw纳入我的项目的所有其他尝试都失败了。
TL; DR
从现有共享对象库中包含标头的最佳方法是什么?是否有可能在没有includes/glfw
目录的情况下实现此目的,或者是否需要修改其代码/项目结构才能加载这些函数?
答案 0 :(得分:1)
我现在意识到自己的错误。
在发布此问题之前,我对共享对象/ DLL和构建GLFW进行了一些研究;但是,我相信我仍然对共享库是什么以及它是如何工作感到困惑。
我现在意识到你做,实际上需要包含头文件;因为它包含中间件代码的声明,而libglfw.so.3.2
库包含代码的定义。
我通过将.so文件保存在Libraries/Shared
目录和External
目录中的GLFW头文件中,并使用CMake将编译器/链接器指向两者来解决了我的问题。< / p>