Связывание GLEW с CMake

Как вы можете связать GLEW с проектом с CMake?

Мы пытались связать GLEW с нашим проектом с помощью CMake в течение как минимум 3 часов без какого-либо успеха, поэтому любая помощь принимается.

Я использую FindGLEW.cmake, который поставляется с CMake 3.1.0

CMakeLists.txt

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories($(GLEW_INCLUDE_DIRS))
endif()

Переменные среды

enter image description here enter image description here

Я использую MinGW w64 для компиляции исходников, и мы успешно связали GLFW и GLM, просто скопировав include и libs в их соответствующие папки, но после того, как я проделал то же самое с GLEW, CMake все равно не смог найти его.

Извините, если я не достаточно ясно сформулировал вопрос. Я предоставлю любую необходимую дополнительную информацию.


Редактировать: мне удалось связать файлы заголовков, указав их расположение в файле CMake Cache, хотя я получаю неопределенную ссылку на такие функции, как glewInit().

Ответ 1

Типичные сценарии CMake, такие как FindGLEW, определяют переменные, которые определяют пути и файлы, которые нужны вашему проекту. Если сценарий не может автоматически определить правильные пути (обычно из-за нестандартного места установки, что вполне нормально), он оставляет эти переменные на ваше усмотрение для заполнения.

В командной строке CMake вы используете флаг -D, чтобы определить и установить значение данной переменной. Другие интерфейсы CMake, такие как CMake-gui или интеграция с IDE, предоставляют вам эту возможность другим способом.

Как бы вы это ни делали, вы также можете изменить кеш напрямую (CMakeCache.txt) и посмотреть, что там использует CMake, или просто очистить кеш. Вам нужно будет повторно запустить CMake, чтобы он принял ваши изменения.

Когда дело доходит до линковки, это когда вам нужно сказать CMake, кто любит ссылаться. Используйте команду link_libraries с тем, что дает вам автоматический скрипт.

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
    link_libraries(${GLEW_LIBRARIES})
endif()

Ответ 2

Секрет find_package(GLEW) находится в файле FindGLEW.cmake с установкой cmake.

find_path(GLEW_INCLUDE_DIR GL/glew.h)
find_library(GLEW_LIBRARY NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64)

Команды find_path и find_library находят пути в стандартных системных путях. Если вы хотите, чтобы они находили пути в пользовательских каталогах, вы должны сообщить им. Например:

set(CMAKE_PREFIX_PATH "d:/libs/glew-1.10.0")
set(CMAKE_LIBRARY_PATH "d:/libs/glew-1.10.0/lib/Release/Win32/")
find_package(GLEW REQUIRED)

Ссылка:

Ответ 3

Я изо всех сил пытался связать glew с cmake через командную строку на Mac. Это может быть полезно, но я не уверен :) Я расскажу вам шаг за шагом о том, что я сделал.

Я установил исходный код Cmake из сети.

Затем я вошел в папку cmake в терминале и набрал

./bootstrap && make && make install 

(это установит инструменты командной строки cmake на нашу платформу ОС)

У меня есть несколько файлов упражнений. Я хочу, чтобы cmake генерировал для меня файлы xcode для всех этих файлов упражнений (например, triangles.cpp, shader.cpp и т.д.). Поэтому я создал каталог внутри папки с файлами упражнений.

$ mkdir xcode 
$ cd xcode
$ cmake -G "Xcode" ..

На данный момент Cmake предполагает установить все файлы xcode, которые содержат правильные библиотеки. Но произошла ошибка:

$ cmake -G "Xcode" ..
CMake Warning (dev) at CMakeLists.txt:3 (cmake_minimum_required):
Compatibility with CMake < 2.4 is not supported by CMake >= 3.0.
This warning is for project developers.  Use -Wno-dev to suppress it.

system name is: Darwin-14.1.0
system processor is: x86_64
-- Could NOT find GLEW (missing:  GLEW_INCLUDE_DIR GLEW_LIBRARY) 
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Using Cocoa for window creation
-- Using NSGL for context creation
-- Building GLFW only for the native architecture

CMake Error: The following variables are used in this project, but they are  set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
GLEW_LIBRARY
linked by target "TextureLoader" in directory /Users/Mydir/Desktop/Exercise/Exercise Files

-- Configuring incomplete, errors occurred!

Затем, чтобы убедиться, что я правильно установил GLEW и все его библиотеки, я запустил

$brew install glew 

Да, я уже установил glew, но он НЕ был связан. См. предупреждение ниже:

Warning: glew-1.12.0 already installed, it just not linked

Затем я выполнил следующие команды:

$ brew unlink glew 
$ brew link glew

И я решил ошибку. Так что просто убедитесь, что вы связали глю. Надеюсь это поможет.

Удачного кодирования :)