Каталог GLFW не найден с помощью CMake и vcpkg

Я не смог понять, как заставить CMake найти и установить правильные константы CMake GLFW при использовании CMake в VS2017. Любая помощь будет оценена :).

Я скачал glfw3 с помощью инструмента Microsoft vcpkg. Я проверил, что файлы физически существуют в каталоге, в который их помещает vcpkg (~\vcpkg\installed\x86-windows\include). Я настроил свой CMakeSettings.json в соответствии с их документами здесь. Я использовал это руководство в качестве основы для правильной настройки GLFW.

Затем я использую find_package(glfw3 REQUIRED), чтобы найти библиотеку glfw3. Это не выдает никаких ошибок. На самом деле CMakeLists.txt вообще не жалуется. Это на этапе компиляции, где он жалуется.

После этого я добавляю glfw3 с target_link_libraries(exe ${GLFW3_LIBRARIES}) в исполняемый файл.

Затем, когда я пытаюсь создать простой пример (включая заголовочный файл), компиляция завершается ошибкой, поскольку не удается найти GLFW/glfw3.h.

Ошибка от MSVC:

fatal error C1083: Cannot open include file: 'GLFW/glfw3.h': No such file or directory 

Вот мой CMakeLists.txt для дополнительной справки:

cmake_minimum_required(VERSION 3.7)
project(learn-opengl)
find_package(glfw3 REQUIRED)

add_executable(learn-opengl main.cpp)
target_link_libraries(learn-opengl ${GLFW3_LIBRARIES})

GLFW3_LIBRARIES Я получил от glfw3Config.cmake, выискивая, что vcpkg помещает в установленный каталог (~\vcpkg\installed\x86-windows\share\glfw3)

И на всякий случай main.cpp:

#include <GLFW/glfw3.h>

int main()
{
    return 0;
}

Я также пытался вызвать cmake из командной строки, но безрезультатно.

Я что-то упускаю? Возможно, я что-то неправильно понял в документации vcpkg? Я действительно понятия не имею, чего мне не хватает... :/ Кроме того, я должен сказать, что я довольно новичок в CMake.


person segmentation_fault    schedule 25.07.2017    source источник
comment
Можете ли вы добавить импортированную цель glfw или glfw3 в команду target_link_libraries вместо ${GLFW3_LIBRARIES}? Это должно исправить ошибку, которую вы видите.   -  person vre    schedule 25.07.2017
comment
@vre ОМГ! glfw сработало :D! Не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я мог закрыть вопрос? Спасибо большое! Так просто...   -  person segmentation_fault    schedule 25.07.2017


Ответы (1)


Переформулируя мой предыдущий комментарий как ответ:

Вы должны добавить импортированную цель glfw в команду target_link_libraries вместо ${GLFW3_LIBRARIES}. find_package(glfw3) создает цель импорта glfw. Делая вашу цель learn-opengl зависимой от этой импортированной цели, вы указываете как библиотеку для связывания, так и используемые каталоги включения.

person vre    schedule 25.07.2017