2

I'm new in using CMake, and I need to link openscenegraph library to my shared library.

Part of code responsible for it looks like this:

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

Im finding osg like this:

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

And everything looks like it is linking, CMake isn't giving me any errors, but during building with Visual Studio 2010 I got errors like:

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

Usually I was finding answers to all my questions without asking them (this is my first question here). This may be trivial, but can someone tell me what am I doing wrong, and how can I make it work?

1 Answers1

0

This doesn't seems related to linking, but to compile. The error says that MSVC doesn't find the file 'osg/Node' in the list of included directories.

Somewhere in your source code, you probably have an include like

#include "osg/Node"

so compiler will search for a file called 'Node' in the directory called 'osg' in one of the 'include directories'.

In CMake, print the list of include dirs for OpenSceneGraph (after find_package(OpenSceneGraph ...)

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

then check this list. If it contains something like C:/path/to/openscenegraph/include then you should import Node using

#include "osg/Node"

If instead you have a folder for each module (ex: C:/path/to/openscenegraph/include/osg) so you must use

#include "Node"

If you don't want to modify includes in your code, then you have to add C:/path/to/openscenegraph/include in your include directories (from CMake script)

include_directories(C:/path/to/openscenegraph/include)
Antwane
  • 20,760
  • 7
  • 51
  • 84