Связь с фреймворком с помощью cmake в Mac OS X

Я пытаюсь связать программу с Ogre и несколькими другими библиотеками на OS X, используя cmake, но я продолжаю получать эту ошибку:

ld: warning: directory '/Library/Frameworks/SDL.framework/Debug' following -L not found
ld: warning: directory '-framework Cocoa/Debug' following -L not found
ld: warning: directory '-framework Cocoa' following -L not found
ld: warning: directory '/System/Library/Frameworks/OpenAL.framework/Debug' following -L not found
ld: warning: directory '/Library/Frameworks/Ogre.framework/Debug' following -L not found
ld: warning: directory '/opt/local/lib/libogg.dylib/Debug' following -L not found
ld: warning: path '/opt/local/lib/libogg.dylib' following -L not a directory
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/openal/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/openal' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/oggvorbis/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/oggvorbis' following -L not found
ld: library not found for -lOgreMain
collect2: ld returned 1 exit status
Command /Developer/usr/bin/g++-4.2 failed with exit code 1

Те же файлы cmake работают на Windows и Linux. Я пытаюсь создать ссылку на фреймворк ogre 1.7.2, который я получил из SDK на сайте ogre. Я думаю, что это проблема связывания, но не проблема людоедов. Связывание с фреймворками с помощью cmake не так интуитивно понятно, как я надеялся. Любые идеи о том, как это исправить?

1 ответ

Решение

Во-первых, вы должны отметить, что ${APPLE} "не означает, что система Mac OS X, только то, что APPLE #defined определен в заголовочных файлах C/C++". использование IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") проверить на OS X.

У меня нет вашей среды сборки, чтобы протестировать следующие предложения, но попробуйте:

Строки 309 и 321 имеют опечатку. Так должно быть "${OGRE_INCLUDE_DIR}" (не ${OGRE_INCLUDE_DIRS}).

В строке 327 ${SDL_LIBRARY}, ${OPENAL_LIBRARY}, а также ${OGG_LIBRARY} пути к файлам библиотеки, когда они должны быть путями к каталогам этих библиотек. link_directories сообщает компоновщику, какие каталоги содержат библиотеки, которые вы указали в target_link_libraries,

Кроме OGRE, строка 327 указывает библиотеки (SDL, AL и OGG), чьи FindXXX.cmake не определяет _LIB_DIR переменная (или эквивалент, который указывает каталог, содержащий библиотеку). Итак, эта строка должна быть

link_directories("${OGRE_LIB_DIR}")

Кроме того, строка 336 не является правильным синтаксисом. target_link_libraries принимает в качестве первого аргумента цель (которая в данном случае должна быть библиотекой PhysGame), но вы передали ей путь к каталогу библиотеки Ogre. Поскольку вы не можете вызвать эту команду, пока не определите цель, вам придется отложить ее до строки 386.

Измените строку 386 с:

target_link_libraries( ${PROJECT_NAME} OgreMain ${Bullet_LibraryNames} cAudio SDL )

чтобы:

target_link_libraries(
    ${PROJECT_NAME}
    "${OGRE_LIBRARIES}"
    ${Bullet_LibraryNames}
    "${OPENAL_LIBRARY}" 
    "${SDL_LIBRARY}"
)

Вы также можете быть заинтересованы в: http://www.ogre3d.org/forums/viewtopic.php?f=1&t=58610&start=0

Другие вопросы по тегам