c++ - 使用 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)
任何帮助将不胜感激,对于我的经验不足,我深表歉意,谢谢!
解决方案
如果你使用 vcpkg,你应该只使用 vcpkg 的 CMake 集成并让它处理细节。您的 CMakeLists.txt 不应包含任何绝对路径,它应该是与您的源代码一起与其他人共享的文件。
话虽如此,眼前的问题可能来自这个问题:
target_link_libraries(${PROJECT} PRIVATE engine SDL2::SDL2main)
从中我猜你的可执行文件是某个时候
#include
的一些头文件engine
。大概engine.hpp
吧?target_link_libraries(engine PRIVATE GLEW::GLEW)
让 Glew 可以
engine
私下使用。也就是说:仅在构建引擎本身时,而不是在构建其他任何东西时(特别是在构建主要可执行文件时)。
从第 1 点开始,对 Glew 的依赖暴露在 的 API 中engine
,所以它是一个公共依赖。因此,您应该将其标记为PUBLIC
2.:
target_link_libraries(engine PUBLIC GLEW::GLEW)
一旦 CMake 知道依赖项已暴露,它还将使 Glew 可用于任何使用engine
.
推荐阅读
- scala - Apache Spark 处理倾斜数据 - 复合键
- cmake - CMake 检查 '/etc/hosts' 以进行 RPM 安装
- wpf - 有没有办法在 WPF 中的按钮上实现工具提示式确认对话框?
- mysql - 首先显示最新图像 - 没有 ID 或日期的表格?
- java - 将多个 @RabbitListener bean 添加到 ContainerFactory 的优雅方式
- list - 在 Haskell 中实现余弦定律?
- mysql - 从左到右加入的正确方法是什么?
- python-3.x - 如何输入()值超过 4095 个字符?
- python - 无法从 pandas 转到 dask 数据帧,内存错误
- ansible - 无法在网络设备上运行命令 - Ansible