Search code examples
c++visual-studio-2010cmakeopenscenegraph

Cmake: link openscenegraph to my shared library


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?


Solution

  • 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)