我是使用CMake的新手,我需要将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})
所有内容看起来都是链接,CMake没有给我任何错误,但在使用Visual Studio 2010构建时我遇到了如下错误:
fatal error C1083: Cannot open include file: 'osg/Node': No such file or directory
通常我会在不问他们的情况下找到我所有问题的答案(这是我的第一个问题)。 这可能是微不足道的,但是有人可以告诉我我做错了什么,我怎样才能让它发挥作用?
答案 0 :(得分:0)
这似乎与链接无关,而是与编译有关。该错误表明MSVC在包含的目录列表中找不到文件'osg / Node'。
在源代码的某处,你可能有像
这样的包含#include "osg/Node"
因此编译器将在其中一个“包含目录”中的名为“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目录中添加C:/path/to/openscenegraph/include
(来自CMake脚本)
include_directories(C:/path/to/openscenegraph/include)