在CLion中构建cmake时找到GLEW,但在命令行中构建时无法找到GLEW



我一直在cllion上做这个项目,似乎没有什么奇怪的事情发生。但我试着在VS Code上运行它,或者我可以说,我想手动运行它,没有任何IDE的帮助。

这是我的CMakeList.txt

# Find OpenGL
find_package(OpenGL REQUIRED)
if (OpenGL_FOUND)
message(STATUS "Debug: Found OpenGL")
list(APPEND EXTRA_LIBS OpenGL::GL)
else()
message(STATUS "Debug: Could NOT find OpenGL")
endif ()
# Find GLEW
find_package(GLEW REQUIRED)
if (GLEW_FOUND)
message(STATUS "Debug: Found GLEW")
list(APPEND EXTRA_LIBS GLEW::glew)
else()
message(STATUS "Debug: Could NOT find GLEW")
endif ()

在CLion中构建项目,它运行得很好

-- Debug: Found OpenGL
-- Debug: Found GLEW
-- Using Win32 for window creation
-- Debug: SUBDIRECTORY OpenGL::GL;GLEW::glew;glfw
-- Debug: MainWindow OpenGL::GL;GLEW::glew;glfw;SUBDIRECTORY
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Workplace/GameMaking/GLFW/GLFW-1st-project/cmake-build-debug
[ 72%] Built target glfw
[ 81%] Built target SUBDIRECTORY
[ 90%] Built target MainWindow
[100%] Built target My_Project
Build finished

但是当我尝试在VS CODE中使用命令行构建它时,我在项目文件夹内创建VS -build目录,就像CLion一样(CLion创建一个名为cmake-build-debug的文件夹)

mkdir vs-build
cd vs-build
cmake ..

找不到GLEW

-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000.
-- Debug: Found OpenGL
CMake Error at D:/Programs/CMake/share/cmake-3.21/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find GLEW (missing: GLEW_INCLUDE_DIRS GLEW_LIBRARIES)
Call Stack (most recent call first):
D:/Programs/CMake/share/cmake-3.21/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
D:/Programs/CMake/share/cmake-3.21/Modules/FindGLEW.cmake:215 (find_package_handle_standard_args)
CMakeLists.txt:28 (find_package)

-- Configuring incomplete, errors occurred!

为什么cllion可以找到我的glew lib,而我的cmake手动找不到?

我是否在我的cmake中犯了错误或使用了错误的cmake命令?

似乎@AlanBirtles是对的,我已经运行了一些代码,这些代码可能会在CLion之前将GLEW路径添加到我的项目构建中,然后我重新检查并认为这些是多余的行,所以我删除了它们。所以现在我的cmake需要手动找到包。

我已经设法找到GLEW包手动像这样

# Find GLEW 
find_package(GLEW QUIET)
if (GLEW_FOUND)
message(STATUS "Debug: Found GLEW")
list(APPEND EXTRA_LIBS GLEW::glew)
else()
message(STATUS "Debug: Could NOT find package GLEW automatically")
message(STATUS "Debug: Finding GLEW manually")
list(APPEND CMAKE_PREFIX_PATH "D:/Programs/glew")
find_package(GLEW REQUIRED)
list(APPEND EXTRA_LIBS GLEW::glew)
endif ()

看起来您已经安装到自定义位置。这很好也很正常,但是硬编码个人文件系统的绝对路径是非常糟糕的做法。请不要养成这样做的习惯。

你可以通过在configure命令行设置-DGLEW_ROOT=D:/Programs/glew来提示CMake在哪里找到GLEW。

在搜索依赖项时,除了简单的find_package(GLEW REQUIRED)之外,您应该避免执行任何操作。CMake已经有了一个复杂的搜索过程,可以被构建系统的用户覆盖。

每"convenient"你硬编码到CMakeLists.txt中的行为最终会变成令人讨厌的。将该文件保持为绝对最小值并将您的环境特定设置存储在CMakePresets.json

最新更新