首页 > 解决方案 > 使用 CMake find_package() 时无法打开源文件“GL/glew.h”

问题描述

如标题中所述,我正在尝试添加glew.h到我在 Visual Studio 2019(Windows 10)上使用 CMake 构建的项目中,并且在这样做时遇到了构建阶段引发的错误fatal error C1083: Cannot open include file: 'GL/glew.h': No such file or directory

我把它包括engine.hpp在内#include <GL/glew.h>

CMakeLists.txt

cmake_minimum_required (VERSION 3.8)

set(PROJECT GUI_Engine)

add_executable (${PROJECT} "./src/driver/main.cpp")

set(HEADER_FILES ./src/include)
set(DEC_FILES ./src/lib)
set(PKGPATH C:/dev/vcpkg/packages)

add_library(engine ${DEC_FILES}/engine.cpp ${HEADER_FILES}/engine.hpp)

list(APPEND CMAKE_PREFIX_PATH ${PKGPATH}/sdl2_x64-windows)
find_package(SDL2 CONFIG REQUIRED)
target_link_libraries(${PROJECT} PRIVATE engine SDL2::SDL2main)
target_link_libraries(engine PRIVATE SDL2::SDL2)

list(APPEND CMAKE_PREFIX_PATH ${PKGPATH}/glew_x64-windows)
find_package(GLEW REQUIRED)
target_link_libraries(engine PRIVATE GLEW::GLEW)

任何帮助将不胜感激,对于我的经验不足,我深表歉意,谢谢!

标签: c++cmakeglew

解决方案


如果你使用 vcpkg,你应该只使用 vcpkg 的 CMake 集成并让它处理细节。您的 CMakeLists.txt 不应包含任何绝对路径,它应该是与您的源代码一起与其他人共享的文件。

话虽如此,眼前的问题可能来自这个问题:

  1. target_link_libraries(${PROJECT} PRIVATE engine SDL2::SDL2main)

    从中我猜你的可执行文件是某个时候#include的一些头文件engine。大概engine.hpp吧?

  2. target_link_libraries(engine PRIVATE GLEW::GLEW)

    让 Glew 可以engine私下使用。也就是说:仅在构建引擎本身时,而不是在构建其他任何东西时(特别是在构建主要可执行文件时)。

从第 1 点开始,对 Glew 的依赖暴露在 的 API 中engine,所以它是一个公共依赖。因此,您应该将其标记为PUBLIC2.:

target_link_libraries(engine PUBLIC GLEW::GLEW)

一旦 CMake 知道依赖项已暴露,它还将使 Glew 可用于任何使用engine.


推荐阅读