正如标题中所述,我试图将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
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)
任何帮助都将不胜感激,我对自己缺乏经验表示歉意,谢谢!
发布于 2021-07-19 00:08:22
如果使用vcpkg,应该只使用vcpkg的CMake集成,让它处理细节。您的CMakeLists.txt不应该包含任何绝对路径,它应该是一个与您的源代码一起与其他人共享的文件。
话虽如此,眼前的问题可能来自于这个问题:
target_link_libraries(${PROJECT} PRIVATE engine SDL2::SDL2main)
从中,我猜您的可执行#include
在某一点上是来自engine
的一些头。可能是engine.hpp
,对吧?
target_link_libraries(engine PRIVATE GLEW::GLEW)
使engine
可以使用Glew,但不公开。也就是说:只在构建引擎本身时,而不是在构建其他任何东西时(特别是在构建主executable).时)。
从第一点开始,engine
的API中公开了对Glew的依赖,因此它是一个公共依赖。因此,您应该在2中将其标记为PUBLIC
。
target_link_libraries(engine PUBLIC GLEW::GLEW)
一旦CMake知道了依赖项是公开的,它还将使Glew对任何使用engine
的人都可用。
https://stackoverflow.com/questions/68433851
复制相似问题