gpt4 book ai didi

c++ - 使用 CMake find_package() 时无法打开源文件 "GL/glew.h"

转载 作者:行者123 更新时间:2023-12-04 07:22:01 25 4
gpt4 key购买 nike

如标题所述,我正在尝试添加 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 不应包含任何绝对路径,它应该是您与源代码一起与其他人共享的文件。

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

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

    从中我猜想您的可执行文件 #include 在某些时候来自 engine 的一些 header 。可能是 engine.hpp,对吧?

  2. target_link_libraries(engine PRIVATE GLEW::GLEW)

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

从第1.点来看,对Glew的依赖暴露在engine的API中,所以是公共(public)依赖。所以你应该在 2. 中将它标记为 PUBLIC:

target_link_libraries(engine PUBLIC GLEW::GLEW)

一旦 CMake 知道依赖项已公开,它还会使 Glew 可用于任何使用 engine 的东西。

关于c++ - 使用 CMake find_package() 时无法打开源文件 "GL/glew.h",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68433851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com