2015-02-15 3 views
2

Я новичок в использовании CMake, и мне нужно связать библиотеку openscenegraph с моей общей библиотекой.Cmake: link openscenegraph в мою общую библиотеку

Часть кода, ответственного за это выглядит следующим образом:

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

Im находкой 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 

Обычно я был fi я отвечаю на все мои вопросы, не спрашивая их (это мой первый вопрос здесь). Это может быть тривиально, но может кто-то сказать мне, что я делаю неправильно, и как я могу заставить его работать?

ответ

0

Это не похоже на привязку, но для компиляции. Ошибка говорит о том, что MSVC не находит файл «osg/Node» в списке включенных каталогов.

Где-то в исходном коде, вы, вероятно, включаемый как

#include "osg/Node" 

так компилятор будет искать файл с именем «Node» в директории под названием «OSG» в одном из "включают в себя каталоги.

В CMake, распечатайте список включает каталоги для OpenSceneGraph (после find_package(OpenSceneGraph ...)

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

затем проверить этот список. Если он содержит что-то вроде C:/path/to/openscenegraph/include то вы должны импортировать узел, используя

#include "osg/Node" 

If вместо этого у вас есть папка для каждого модуля (например: C:/path/to/openscenegraph/include/osg), поэтому вы должны использовать

#include "Node" 

Если вы не хотите, чтобы изменить включает в свой код, то вы должны добавить C:/path/to/openscenegraph/include в включаемых каталогов (из CMake сценария)

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