首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CMake find_package()时无法打开源文件“GL/glw.h”

使用CMake find_package()时无法打开源文件“GL/glw.h”
EN

Stack Overflow用户
提问于 2021-07-18 23:44:30
回答 1查看 478关注 0票数 3

正如标题中所述,我试图将glew.h添加到在VisualStudio2019(Windows10)上用CMake构建的项目中,这样做会在构建阶段fatal error C1083: Cannot open include file: 'GL/glew.h': No such file or directory中遇到一个错误。

我把它包括在engine.hpp中,作为#include <GL/glew.h>

CMakeLists.txt

代码语言:javascript
运行
复制
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)

任何帮助都将不胜感激,我对自己缺乏经验表示歉意,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-19 00:08:22

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

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

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

从中,我猜您的可执行#include在某一点上是来自engine的一些头。可能是engine.hpp,对吧?

  1. target_link_libraries(engine PRIVATE GLEW::GLEW)

使engine可以使用Glew,但不公开。也就是说:只在构建引擎本身时,而不是在构建其他任何东西时(特别是在构建主executable).时)。

从第一点开始,engine的API中公开了对Glew的依赖,因此它是一个公共依赖。因此,您应该在2中将其标记为PUBLIC

代码语言:javascript
运行
复制
target_link_libraries(engine PUBLIC GLEW::GLEW)

一旦CMake知道了依赖项是公开的,它还将使Glew对任何使用engine的人都可用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68433851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档