Cmake: link 打开场景图到我的共享库

Cmake: link openscenegraph to my shared library

我是 CMake 的新手,我需要 link openscenegraph 库到我的共享库。

负责它的部分代码如下所示:

add_library (MyLib SHARED ${${PROJECT_NAME}_sources})
target_link_libraries(MyLib ${OPENSCENEGRAPH_LIBRARIES})

我发现 osg 是这样的:

find_package(OpenSceneGraph REQUIRED osgDB osgUtil osg osgViewer osgGA osgShadow)
include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS})
add_definitions(${OPENSCENEGRAPH_DEFINITIONS})

一切看起来都是 linking,CMake 没有给我任何错误,但是在使用 Visual Studio 2010 构建期间我遇到了如下错误:

fatal error C1083: Cannot open include file: 'osg/Node': No such file or directory

通常我会在不问问题的情况下找到所有问题的答案(这是我在这里的第一个问题)。 这可能是微不足道的,但有人可以告诉我我做错了什么,我怎样才能让它发挥作用?

这似乎与链接无关,而是与编译有关。该错误表明 MSVC 在包含的目录列表中找不到文件 'osg/Node'。

在您的源代码中的某处,您可能有一个像

这样的包含
#include "osg/Node"

因此编译器将在 'include directories'.

之一的名为 'osg' 的目录中搜索名为 'Node' 的文件

在 CMake 中,打印 OpenSceneGraph 的包含目录列表(在 find_package(OpenSceneGraph ...)

之后
message(STATUS "OSG Incl dirs: ${OPENSCENEGRAPH_INCLUDE_DIRS}")

然后检查此列表。如果它包含类似 C:/path/to/openscenegraph/include 的内容,那么您应该使用

导入节点
#include "osg/Node"

如果每个模块都有一个文件夹(例如:C:/path/to/openscenegraph/include/osg),那么您必须使用

#include "Node"

如果您不想修改代码中的 include,则必须在 include 目录中添加 C:/path/to/openscenegraph/include(来自 CMake 脚本)

include_directories(C:/path/to/openscenegraph/include)