Сборка проекта VS2015 x64 с использованием glew 1.13.0 и CMake 3.4.0

Как создать проект VS2015 x64 с использованием glew 1.13.0 и CMake 3.4.0?

Я подготовил минимальную демонстрацию, которую можно найти здесь:

И установите путь GLEW_INCLUDE_DIR к соответствующему каталогу ("C: \ Users \ no68koc \ Downloads \ glew-1.13.0 \ include")

Но CMake дает мне несколько ошибок:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find GLEW (missing: GLEW_LIBRARY)
Call Stack (most recent call first):
  C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindGLEW.cmake:44 (find_package_handle_standard_args)
  CMakeLists.txt:4 (find_package)


Configuring incomplete, errors occurred!
See also "C:/build/vs2015/GlewDemo/CMakeFiles/CMakeOutput.log".

Как это правильно работает?


person Vertexwahn    schedule 17.11.2015    source источник


Ответы (2)


CMake не может найти ваш GLEW. Таким образом, вы должны намекнуть на CMake.

Либо включите GLEW в какое-нибудь место, где CMake ищет компоненты. На ум приходит установка GLEW.

Или вы определяете переменные вручную. Вы уже сделали это для GLEW_INCLUDE_DIR. Вы также должны определить GLEW_LIBRARY.
Это должен быть путь к библиотеке с именем glew32, glew или glew32s. Для Unices это должно быть lib *. Так что, возможно, с некоторыми дополнительными номерами версий. В Windows это должна быть * .dll или * .lib.

person usr1234567    schedule 17.11.2015
comment
Можно ли установить только корневой каталог (например, C: \ Users \ no68koc \ Downloads \ glew-1.13.0) для glew - а все остальное работает автоматически? Кажется, что файл FindGlew.cmake, предоставляемый CMake, очень громоздок в использовании. Возможно, из-за этого несколько человек начали писать свои собственные файлы FindGlew.cmake, например, здесь: github.com/tlorach/OpenGLText/blob/master/cmake/FindGLEW.cmake - person Vertexwahn; 17.11.2015
comment
Нет, это не так. Я только что проверил исходный код FindGLEW.cmake. Вероятно, можно было бы улучшить тест, предоставляемый CMake. Но тот, который вы связали, тоже выглядит сломанным. Почему следует отмечать FOUND_GLEW как расширенный? - person usr1234567; 17.11.2015
comment
Думаю, модуль больше никто не обслуживает. Откройте отчет об ошибке. - person usr1234567; 17.11.2015

Сообщение об ошибке

Could NOT find GLEW (missing: GLEW_LIBRARY)

это стандартное сообщение, генерируемое FindXXX.cmake скриптом (вызываемым через find_package(XXX)), что ему не удалось установить (вывести) некоторые переменные CMake, поэтому предполагается, что весь пакет не найден.

Большинство скриптов FindXXX.cmake описывает (в комментарии), какие переменные устанавливаются скриптом для пользователя.

Но только некоторые из них описывают, как пользователь может помочь скрипту в случае, если скрипт вообще не смог найти нужный пакет, или если пользователь хочет, чтобы скрипт нашел конкретную установку пакета вместо установленного по умолчанию.

Универсального подхода к помощи FindXXX.cmake скрипту не существует, в большинстве случаев следует анализировать код скрипта на предмет известных переменных, которые могут помочь.

В данном случае (с пакетом GLEW) анализ предоставленного CMake FindGLEW.cmake < Скрипт / a> показывает, что и вызов find_path() (который устанавливает переменную GLEW_INCLUDE_DIR), и вызов find_library() (который устанавливает переменную GLEW_LIBRARY) не используют подсказок (параметры HINT или PATH) для поиска. Но есть стандартные подсказки, которые используются обеими этими командами. Одна из этих подсказок - ${CMAKE_PREFIX_PATH}/include каталог для find_path и аналогичный каталог для find_library.

Итак, вы можете использовать

list(APPEND CMAKE_PREFIX_PATH "C:\Users\no68koc\Downloads\glew-1.13.0")

для подсказки find_library () и find_path () для поиска и в этом каталоге. В качестве альтернативы вы можете установить переменную CMAKE_PREFIX_PATH в кеше CMake либо в графическом интерфейсе (например, внутри Visual Studio), либо через командную строку:

cmake -DCMAKE_PREFIX_PATH:PATH=C:\Users\no68koc\Downloads\glew-1.13.0

(Обратите внимание, что использование list(APPEND ...) вместо set(...) в CMakeLists.txt не отменяет переменную, если она также установлена ​​в кеше).


Вы можете использовать сторонний FindGLEW.cmake сценарий

Вы можете загрузить его в свой проект (например, в cmake/FindGLEW.cmake) и выпустить

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

for tell find_package() использовать этот скрипт вместо скрипта по умолчанию.

Данный скрипт использует

${GLEW_LOCATION}

каталог (и его подкаталоги) в качестве подсказки для поиска в find_path() и find_library() (в параметре команды PATH). Таким образом, вы можете установить переменную GLEW_LOCATION в каталог установки:

set(GLEW_LOCATION "C:\Users\no68koc\Downloads\glew-1.13.0")

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

Кроме того, данный FindGLEW.cmake скрипт использует

$ENV{GLEW_LOCATION}

каталог в качестве подсказки. Это означает, что также поможет установка GLEW_LOCATION переменной среды.

person Tsyvarev    schedule 17.11.2015