Кажется, я не могу включить Glut в мой проект cmake Ubuntu

Я использую Ubuntu 20.04.1 LTS, и в настоящее время я работаю над учебным пособием по OpenSceneGraph 3.0 от Rui Wang и Xuelei Qian, и я на странице 87 пытаюсь создать Teapot, для которого требуются библиотеки перенасыщения и включаются. После некоторых исследований я скачал freeglut 3.2.1 и создал его в своем собственном каталоге. Излишне говорить, что я новичок в Ubuntu и не совсем понимаю, куда что-то идет после команды cmake make, не говоря уже о том, куда что-то идет после команды cmake install.

При попытке сборки возникает следующая ошибка:

/usr/bin/ld: CMakeFiles/MyProject.dir/main.cpp.o: in function `TeapotDrawable::drawImplementation(osg::RenderInfo&) const':
main.cpp:(.text+0x129): undefined reference to `glutSolidTeapot'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/MyProject.dir/build.make:91: MyProject] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/MyProject.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

До сих пор я использовал следующий файл CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)

PROJECT(MyProject)

#find_package( GL )
find_package( OpenGL )
#find_package( freeglut REQUIRED ) // added REQUIRED
find_package( OpenThreads )
find_package( osg )
find_package( osgDB )
find_package( osgUtil )
find_package( osgViewer )

macro ( config_project PROJNAME LIBNAME )
                include_directories( ${${LIBNAME}_INCLUDE_DIR} )
                target_link_libraries( ${PROJNAME} ${${LIBNAME}_LIBRARY} )
endmacro()

add_executable( MyProject main.cpp )
config_project( MyProject OPENTHREADS )
config_project( MyProject OSG )
config_project( MyProject OSGDB )
config_project( MyProject OSGUTIL )
config_project( MyProject OSGVIEWER )
#config_project( MyProject FREEGLUT )
config_project( MyProject GLUT )
config_project( MyProject OPENGL )

Незакомментированные строки - это то, что я пытаюсь заставить это работать. Это работало для других примеров, использованных в книге до сих пор. Freeglut, OSG и OpenGL устанавливаются в каталоге usr/local/include

Если какая-либо информация отсутствует, я, конечно, отредактирую этот вопрос соответствующим образом. Спасибо.

Изменить: после добавления ключевого слова REQUIRED я получаю следующую ошибку от CMake:

CMake Error at CMakeLists.txt:7 (find_package):
  By not providing "Findfreeglut.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "freeglut",
  but CMake did not find one.

  Could not find a package configuration file provided by "freeglut" with any
  of the following names:

    freeglutConfig.cmake
    freeglut-config.cmake

  Add the installation prefix of "freeglut" to CMAKE_PREFIX_PATH or set
  "freeglut_DIR" to a directory containing one of the above files.  If
  "freeglut" provides a separate development package or SDK, be sure it has
  been installed.

person HanZolo    schedule 23.11.2020    source источник
comment
Итак, что произойдет, если вы раскомментируете строку find_package( freeglut )?   -  person Tsyvarev    schedule 23.11.2020
comment
Если я раскомментирую это, мне также придется раскомментировать #config_project (мой проект FREEGLUT), верно? Это все еще дает мне ту же ошибку.   -  person HanZolo    schedule 23.11.2020
comment
Вы уверены, что все пакеты (включая freeglut), которые вы ищете с помощью find_package(), фактически найдены? Вы можете добавить ключевое слово REQUIRED, поэтому CMake автоматически завершит работу, если пакет не будет найден. Также обратите внимание, что обычными переменными, установленными find_package, являются _INCLUDE_DIRS и _LIBRARIES. См., например. документация для скрипта FindGLUT.cmake. (Этот скрипт можно использовать через find_package(GLUT).)   -  person Tsyvarev    schedule 23.11.2020
comment
Как мне установить _INCLUDE_DIRS и тому подобное? cmake-интерфейс? Я тоже пробовал это, но когда я использую cmake .. после этого, настройки перезаписываются, и да, freeglut не найден. Я отредактировал вопрос с правильной ошибкой.   -  person HanZolo    schedule 23.11.2020
comment
Итак, прочитав ваш комментарий более тщательно, я написал find_package( GLUT REQUIRED ), который, кажется, работает, по крайней мере, теперь я получаю еще одну ошибку :), а именно: ОШИБКА freeglut: функция ‹glutSolidTeapot› вызывается без предварительного вызова 'glutInit'. Есть идеи, что это может быть?   -  person HanZolo    schedule 23.11.2020
comment
Поэтому вам нужно вызвать glutInit перед использованием функций GLUT. Возможно, есть какая-то другая функция, которая, в свою очередь, вызывает glutInit. Но я не эксперт в GL, поэтому не могу предложить ничего, кроме как прочитать какой-нибудь туториал.   -  person Tsyvarev    schedule 23.11.2020
comment
Хорошо, спасибо за вашу помощь, сейчас я тестирую различные подходы к glutInit(). Какая здесь обычная практика? Мне отметить ваш комментарий и поставить его как ответ?   -  person HanZolo    schedule 23.11.2020
comment
Я пометил ваш вопрос как дубликат вопроса по той же теме (с использованием freeglut в CMake). Обратите внимание, что пометка-дубликат предназначена только для предотвращения публикации одних и тех же ответов во многих сообщениях с вопросами. Ваш вопрос не удален (и не предназначен для удаления), и по нему можно проголосовать.   -  person Tsyvarev    schedule 23.11.2020
comment
Спасибо. Я застреваю в функции glutInit(). Возможно, скоро придется написать следующий вопрос.   -  person HanZolo    schedule 23.11.2020