opengl源码+glfw+cmake version ,现在怎么将LearnOpenGL中的源码编译后,可以使用vs2022打开

OpenTK 2025-12-04 16:38:04

https://www.glfw.org/download.html

https://cmake.org/download/#latest

已知下载opengl源码在E:\OpenTK\opengl\LearnOpenGL,下载glfw-3.4在D:\opengl\glfw-3.4.bin.WIN64,以及下载cmake version 4.0.3,现在怎么将LearnOpenGL中的源码编译后,可以使用vs2022打开

根据你的描述,你已经准备好所需的依赖项(LearnOpenGL源码、GLFW和CMake),目标是编译出能在VS2022中打开的项目。核心步骤是利用CMake生成VS2022的解决方案文件。

下面是具体的操作步骤:

第一步:使用CMake生成VS2022项目

这是最关键的一步,CMake会根据项目的配置文件,将源码生成为Visual Studio可以打开的 .sln 解决方案文件。具体步骤如下:

  1. 打开CMake GUI:在Windows开始菜单中找到并打开 CMake (cmake-gui)

  2. 指定源码和构建目录

    • Where is the source code:点击“Browse Source”,选择你存放LearnOpenGL源码的目录:E:\OpenTK\opengl\LearnOpenGL

    • Where to build the binaries:点击“Browse Build”,在同一目录下创建一个新文件夹(例如 build),然后选择它。这能保持项目结构清晰。路径类似 E:\OpenTK\opengl\LearnOpenGL\build

  3. 配置生成器

    • 点击左下角的 “Configure” 按钮。

    • 在弹出的窗口中,在“Specify the generator for this project”下选择 “Visual Studio 17 2022”

    • 在“Optional platform for generator”下,根据你的需求选择 x64(推荐)或 Win32

    • 点击 “Finish”

  4. 处理可能的GLFW路径错误(重要)

    • CMake开始配置后,可能会因为找不到GLFW库而报红并提示错误。

    • 解决方法:在CMake GUI的变量列表中找到 GLFW_ROOT 或类似变量(例如 glfw3_DIR),将其值手动设置为你GLFW的安装目录:D:\opengl\glfw-3.4.bin.WIN64

  5. 生成解决方案

    • 解决所有错误,变量列表不再有红色条目后,点击 “Generate” 按钮。

    • 如果成功,日志窗口最后会显示 “Generating done”

    • 此时,点击 “Open Project” 按钮,CMake会自动用Visual Studio 2022打开生成的解决方案。

注:如果你已经有一个CMake项目,VS2022也支持直接打开文件夹或CMakeLists.txt文件来加载项目。更详细的操作步骤,可以参考官方关于CMake项目的说明。

第二步:在Visual Studio 2022中编译与运行

成功打开项目后,操作方式就和普通的Visual Studio C++项目一样了。

  1. 切换目标视图:在解决方案资源管理器中,默认可能是文件夹视图。建议通过右键菜单切换到 “CMake 目标视图”,这样会以可执行程序/库的方式组织项目,结构更清晰。

  2. 选择启动项:在顶部的标准工具栏中,找到 “选择启动项” 下拉菜单。这里会列出所有CMake生成的可执行目标(例如 1.1.hello_window)。选择你想运行的那个示例。

  3. 编译与调试

    • 按 F5 或在菜单栏点击 “调试” -> “开始调试”,程序就会在调试模式下编译并运行。

    • 如果需要设置程序启动参数,可以在“CMake目标视图”中,右键点击对应的目标,选择“添加调试配置”来编辑 launch.vs.json 文件。

为了让你更清楚地了解整个过程,可以参考下面的流程图,它概括了从你的文件到最终运行程序的关键步骤:

可能遇到的问题与解决思路

  • GLAD相关错误:如果你运行示例时遇到关于 gladLoadGLLoader 的链接错误,说明项目可能依赖GLAD库。你需要按照项目要求(通常是 CMakeLists.txt 中的说明)下载或配置GLAD。这通常涉及到将GLAD的源文件(glad.c)添加到项目中,并正确设置包含目录。

  • 其他库依赖:一些高级示例可能还需要 stb_image(用于读取图像)或 assimp(用于加载模型)等库。如果遇到类似错误,你需要根据提示下载对应的库,并可能需要修改CMake配置来指定它们的路径。

如果在配置过程中,CMake提示缺少了其他关键的库(比如GLAD),你能告诉我具体是哪个LearnOpenGL的章节或示例项目需要编译吗?这样我可以帮你提供更针对性的依赖查找和配置建议。

CMake Error at CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 3.5 has been removed from CMake. Update the VERSION argument <min> value. Or, use the <min>...<max> syntax to tell CMake that the project requires at least <min> but has been updated to work with policies introduced by <max> or earlier. Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway. 提示这个

这个错误是因为CMake版本兼容性问题。根据你安装的CMake 4.0.3版本,已经无法处理要求最低CMake版本小于3.5的项目。我们来一步步解决:

解决方案(三选一)

方案一:修改项目CMakeLists.txt文件(推荐)

这是最根本的解决方法,直接修改LearnOpenGL源码的配置文件。

  1. 记事本或VS Code打开以下文件:

    text

    E:\OpenTK\opengl\LearnOpenGL\CMakeLists.txt
  2. 找到文件第一行,它可能类似于:

    text

    cmake_minimum_required(VERSION 2.8)

    text

    cmake_minimum_required(VERSION 3.0)
  3. 将其修改为:

    text

    cmake_minimum_required(VERSION 3.5)

    或者更安全的范围语法:

    text

    cmake_minimum_required(VERSION 3.5...4.0.3)
  4. 保存文件,然后回到CMake GUI,点击 "Configure",这次应该就不会有版本错误了。

方案二:使用CMake命令行参数

如果你不想修改源文件,可以在CMake GUI中传递参数:

  1. 在CMake GUI中,点击 "Add Entry" 按钮。

  2. 在弹出的对话框中填写:

    • NameCMAKE_POLICY_VERSION_MINIMUM

    • TypeSTRING

    • Value3.5

  3. 然后点击 "Configure" 重新配置。

方案三:更新LearnOpenGL源码(如果适用)

如果你使用的是较旧的LearnOpenGL版本,可以尝试获取更新版本:

bash

# 如果是从GitHub下载的
cd E:\OpenTK\opengl\LearnOpenGL
git pull origin master

如果修改后仍有问题

修改完CMakeLists.txt后,请重新在CMake GUI中配置。如果还有其他错误,请告诉我:

  1. 修改后是否解决了版本错误?

  2. 如果还有其他错误,具体是什么错误信息?

  3. 你现在想编译的是LearnOpenGL中的哪个具体示例?(比如是第一章的hello_window还是其他?)

这样可以帮你更有针对性地解决后续可能遇到的依赖库问题,比如GLFW、GLAD等。

使用第一种方法还是提示CMake Error at CMakeLists.txt:2 (cmake_policy): Compatibility with CMake < 3.5 has been removed from CMake. Update the VERSION argument <min> value. Or, use the <min>...<max> syntax to tell CMake that the project requires at least <min> but has been updated to work with policies introduced by <max> or earlier. Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.

这个问题意味着项目中可能有多个CMakeLists.txt文件需要修改。让我们一步步排查:

解决方案

1. 检查并修改所有CMakeLists.txt文件

除了根目录,LearnOpenGL的每个子项目(示例)通常都有自己的CMakeLists.txt

请按以下顺序操作:

步骤1:修改根目录文件
用文本编辑器打开并修改:

text

E:\OpenTK\opengl\LearnOpenGL\CMakeLists.txt

确保第一行是:

cmake

cmake_minimum_required(VERSION 3.5)

步骤2:修改子目录文件
打开以下路径,修改其中的CMakeLists.txt

text

E:\OpenTK\opengl\LearnOpenGL\src\CMakeLists.txt

同样修改第一行的版本号为3.5或以上。

步骤3:查找其他可能文件
在资源管理器中搜索LearnOpenGL目录下所有的CMakeLists.txt文件,逐一检查并修改。

2. 快速批量修改方法

如果文件很多,可以在命令行中执行:

bash

# 进入项目目录
cd E:\OpenTK\opengl\LearnOpenGL

# 使用PowerShell替换所有文件中的版本号
powershell -Command "(Get-ChildItem -Recurse -Filter CMakeLists.txt) | ForEach-Object { (Get-Content $_.FullName) -replace 'cmake_minimum_required\\(VERSION [0-9.]+[^)]*\\)', 'cmake_minimum_required(VERSION 3.5)' | Set-Content $_.FullName }"

3. 如果仍然不行,尝试强制方法

在CMake GUI中:

  1. 点击 "Delete Cache"(清除缓存)

  2. 然后点击 "Configure"

  3. 在弹出窗口底部找到 "Advanced" 复选框并勾选

  4. 在变量列表中找到:

    • CMAKE_POLICY_DEFAULT_CMP<NNNN> 相关变量

    • 将它们全部删除或设置为NEW

4. 创建全新的构建目录

有时候缓存会导致奇怪的问题:

  1. 删除你之前创建的build文件夹:

    text

    E:\OpenTK\opengl\LearnOpenGL\build
  2. 在CMake GUI中重新指定构建目录为一个全新的空文件夹,比如:

    text

    E:\OpenTK\opengl\LearnOpenGL\build_vs2022
  3. 重新配置

验证步骤

修改完成后,请:

  1. 告诉我修改了哪些文件(几个文件,分别在什么路径)

  2. 清除CMake缓存后重新配置的结果

  3. 如果还有错误,请提供完整的错误信息截图或复制

备选方案:使用VS2022直接打开

如果CMake问题依然存在,VS2022有内置的CMake支持:

  1. 打开VS2022

  2. 选择 "打开本地文件夹"

  3. 导航到 E:\OpenTK\opengl\LearnOpenGL

  4. VS2022会自动检测CMakeLists.txt并尝试配置

这种方法有时能更好地处理版本兼容性问题。

你现在的情况是修改了哪些文件?修改后具体的错误信息是什么?

cmake_minimum_required(VERSION 3.5...4.0.3) cmake_policy(VERSION 3.0) project(LearnOpenGL) set(CMAKE_CXX_STANDARD 17) # this does nothing for MSVC, use target_compile_options below set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build (Debug or Release)" FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") if(WIN32) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) endif(WIN32) link_directories(${CMAKE_SOURCE_DIR}/lib) # find the required packages find_package(GLM REQUIRED) message(STATUS "GLM included at ${GLM_INCLUDE_DIR}") find_package(GLFW3 REQUIRED) message(STATUS "Found GLFW3 in ${GLFW3_INCLUDE_DIR}") find_package(ASSIMP REQUIRED) message(STATUS "Found ASSIMP in ${ASSIMP_INCLUDE_DIR}") # find_package(SOIL REQUIRED) # message(STATUS "Found SOIL in ${SOIL_INCLUDE_DIR}") # find_package(GLEW REQUIRED) # message(STATUS "Found GLEW in ${GLEW_INCLUDE_DIR}") if(APPLE) find_package(Freetype REQUIRED) message(STATUS "Found Freetype in ${FREETYPE_INCLUDE_DIRS}") endif(APPLE) if(WIN32) set(LIBS glfw3 opengl32 assimp freetype irrKlang) add_definitions(-D_CRT_SECURE_NO_WARNINGS) elseif(UNIX AND NOT APPLE) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") find_package(OpenGL REQUIRED) add_definitions(${OPENGL_DEFINITIONS}) find_package(X11 REQUIRED) # note that the order is important for setting the libs # use pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3) in a terminal to confirm set(LIBS ${GLFW3_LIBRARY} X11 Xrandr Xinerama Xi Xxf86vm Xcursor GL dl pthread freetype ${ASSIMP_LIBRARY}) set (CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -ldl") elseif(APPLE) INCLUDE_DIRECTORIES(/System/Library/Frameworks) FIND_LIBRARY(COCOA_LIBRARY Cocoa) FIND_LIBRARY(OpenGL_LIBRARY OpenGL) FIND_LIBRARY(IOKit_LIBRARY IOKit) FIND_LIBRARY(CoreVideo_LIBRARY CoreVideo) MARK_AS_ADVANCED(COCOA_LIBRARY OpenGL_LIBRARY) SET(APPLE_LIBS ${COCOA_LIBRARY} ${IOKit_LIBRARY} ${OpenGL_LIBRARY} ${CoreVideo_LIBRARY}) SET(APPLE_LIBS ${APPLE_LIBS} ${GLFW3_LIBRARY} ${ASSIMP_LIBRARY} ${FREETYPE_LIBRARIES}) set(LIBS ${LIBS} ${APPLE_LIBS}) else() set(LIBS ) endif(WIN32) set(CHAPTERS 1.getting_started 2.lighting 3.model_loading 4.advanced_opengl 5.advanced_lighting 6.pbr 7.in_practice ) set(1.getting_started 1.1.hello_window 1.2.hello_window_clear 2.1.hello_triangle 2.2.hello_triangle_indexed 2.3.hello_triangle_exercise1 2.4.hello_triangle_exercise2 2.5.hello_triangle_exercise3 3.1.shaders_uniform 3.2.shaders_interpolation 3.3.shaders_class 4.1.textures 4.2.textures_combined 4.4.textures_exercise2 4.5.textures_exercise3 4.6.textures_exercise4 5.1.transformations 5.2.transformations_exercise2 6.1.coordinate_systems 6.2.coordinate_systems_depth 6.3.coordinate_systems_multiple 7.1.camera_circle 7.2.camera_keyboard_dt 7.3.camera_mouse_zoom 7.4.camera_class ) set(2.lighting 1.colors 2.1.basic_lighting_diffuse 2.2.basic_lighting_specular 3.1.materials 3.2.materials_exercise1 4.1.lighting_maps_diffuse_map 4.2.lighting_maps_specular_map 4.4.lighting_maps_exercise4 5.1.light_casters_directional 5.2.light_casters_point 5.3.light_casters_spot 5.4.light_casters_spot_soft 6.multiple_lights ) set(3.model_loading 1.model_loading ) set(4.advanced_opengl 1.1.depth_testing 1.2.depth_testing_view 2.stencil_testing 3.1.blending_discard 3.2.blending_sort 5.1.framebuffers 5.2.framebuffers_exercise1 6.1.cubemaps_skybox 6.2.cubemaps_environment_mapping 8.advanced_glsl_ubo 9.1.geometry_shader_houses 9.2.geometry_shader_exploding 9.3.geometry_shader_normals 10.1.instancing_quads 10.2.asteroids 10.3.asteroids_instanced 11.1.anti_aliasing_msaa 11.2.anti_aliasing_offscreen ) set(5.advanced_lighting 1.advanced_lighting 2.gamma_correction 3.1.1.shadow_mapping_depth 3.1.2.shadow_mapping_base 3.1.3.shadow_mapping 3.2.1.point_shadows 3.2.2.point_shadows_soft 4.normal_mapping 5.1.parallax_mapping 5.2.steep_parallax_mapping 5.3.parallax_occlusion_mapping 6.hdr 7.bloom 8.1.deferred_shading 8.2.deferred_shading_volumes 9.ssao ) set(6.pbr 1.1.lighting 1.2.lighting_textured 2.1.1.ibl_irradiance_conversion 2.1.2.ibl_irradiance 2.2.1.ibl_specular 2.2.2.ibl_specular_textured ) set(7.in_practice 1.debugging 2.text_rendering #3.2d_game ) set(GUEST_ARTICLES 8.guest/2020/oit 8.guest/2020/skeletal_animation 8.guest/2021/1.scene/1.scene_graph 8.guest/2021/1.scene/2.frustum_culling 8.guest/2021/2.csm 8.guest/2021/3.tessellation/terrain_gpu_dist 8.guest/2021/3.tessellation/terrain_cpu_src 8.guest/2021/4.dsa 8.guest/2022/5.computeshader_helloworld 8.guest/2022/6.physically_based_bloom 8.guest/2022/7.area_lights/1.area_light 8.guest/2022/7.area_lights/2.multiple_area_lights ) configure_file(configuration/root_directory.h.in configuration/root_directory.h) include_directories(${CMAKE_BINARY_DIR}/configuration) # first create relevant static libraries required for other projects add_library(STB_IMAGE "src/stb_image.cpp") set(LIBS ${LIBS} STB_IMAGE) add_library(GLAD "src/glad.c") set(LIBS ${LIBS} GLAD) macro(makeLink src dest target) add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${src} ${dest} DEPENDS ${dest} COMMENT "mklink ${src} -> ${dest}") endmacro() function(create_project_from_sources chapter demo) file(GLOB SOURCE "src/${chapter}/${demo}/*.h" "src/${chapter}/${demo}/*.cpp" "src/${chapter}/${demo}/*.vs" "src/${chapter}/${demo}/*.fs" "src/${chapter}/${demo}/*.tcs" "src/${chapter}/${demo}/*.tes" "src/${chapter}/${demo}/*.gs" "src/${chapter}/${demo}/*.cs" ) if (demo STREQUAL "") SET(replaced "") string(REPLACE "/" "_" replaced ${chapter}) set(NAME ${replaced}) else() set(NAME "${chapter}__${demo}") endif() add_executable(${NAME} ${SOURCE}) target_link_libraries(${NAME} ${LIBS}) if(MSVC) target_compile_options(${NAME} PRIVATE /std:c++17 /MP) target_link_options(${NAME} PUBLIC /ignore:4099) endif(MSVC) if(WIN32) set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${chapter}") set_target_properties(${NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${chapter}/Debug") elseif(UNIX AND NOT APPLE) set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${chapter}") elseif(APPLE) set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${chapter}") set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/${chapter}") set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/${chapter}") endif(WIN32) # copy shader files to build directory file(GLOB SHADERS "src/${chapter}/${demo}/*.vs" # "src/${chapter}/${demo}/*.frag" "src/${chapter}/${demo}/*.fs" "src/${chapter}/${demo}/*.tcs" "src/${chapter}/${demo}/*.tes" "src/${chapter}/${demo}/*.gs" "src/${chapter}/${demo}/*.cs" ) # copy dlls file(GLOB DLLS "dlls/*.dll") foreach(SHADER ${SHADERS}) if(WIN32) # configure_file(${SHADER} "test") add_custom_command(TARGET ${NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${SHADER} $<TARGET_FILE_DIR:${NAME}>) add_custom_command(TARGET ${NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLLS} $<TARGET_FILE_DIR:${NAME}>) elseif(UNIX AND NOT APPLE) file(COPY ${SHADER} DESTINATION ${CMAKE_SOURCE_DIR}/bin/${chapter}) elseif(APPLE) # create symbolic link for *.vs *.fs *.gs get_filename_component(SHADERNAME ${SHADER} NAME) makeLink(${SHADER} ${CMAKE_SOURCE_DIR}/bin/${chapter}/${SHADERNAME} ${NAME}) endif(WIN32) endforeach(SHADER) # if compiling for visual studio, also use configure file for each project (specifically to set up working directory) if(MSVC) configure_file(${CMAKE_SOURCE_DIR}/configuration/visualstudio.vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.vcxproj.user @ONLY) endif(MSVC) endfunction() # then create a project file per tutorial foreach(CHAPTER ${CHAPTERS}) foreach(DEMO ${${CHAPTER}}) create_project_from_sources(${CHAPTER} ${DEMO}) endforeach(DEMO) endforeach(CHAPTER) foreach(GUEST_ARTICLE ${GUEST_ARTICLES}) create_project_from_sources(${GUEST_ARTICLE} "") endforeach(GUEST_ARTICLE) include_directories(${CMAKE_SOURCE_DIR}/includes) 这个list文件是不是有问题

看了你的CMakeLists.txt文件,问题很明显了!问题在第2行

cmake

cmake_minimum_required(VERSION 3.5...4.0.3)
cmake_policy(VERSION 3.0)  # ← 这一行有问题!

cmake_policy(VERSION 3.0) 这一行要求CMake策略版本为3.0,但这与第一行的 cmake_minimum_required(VERSION 3.5...4.0.3) 不一致。CMake 3.5删除了对旧版本策略的兼容性。

解决方案

方案一:直接删除第2行(最简单)

  1. 打开 E:\OpenTK\opengl\LearnOpenGL\CMakeLists.txt

  2. 删除第2行 cmake_policy(VERSION 3.0)

  3. 保存文件

方案二:更新策略版本(推荐)

将第2行改为与第1行兼容的版本:

cmake

cmake_minimum_required(VERSION 3.5...4.0.3)
cmake_policy(VERSION 3.5)  # ← 改为3.5或更高

或者直接删除cmake_policy行,因为cmake_minimum_required已经隐式设置了策略版本。

另外两个需要修改的地方

你的CMakeLists.txt中还有两处潜在问题需要一并修改:

1. 修复GLFW查找问题

你的文件使用find_package(GLFW3 REQUIRED),但你有的是预编译的GLFW二进制包。需要在CMake GUI中手动设置路径:

在CMake GUI中点击"Add Entry",添加:

  • NameGLFW3_DIR

  • TypePATH

  • ValueD:/opengl/glfw-3.4.bin.WIN64/lib/cmake/glfw3

或者如果找不到cmake文件,添加:

  • Nameglfw3_DIR

  • TypePATH

  • ValueD:/opengl/glfw-3.4.bin.WIN64

2. 其他依赖库可能需要下载

你的CMakeLists.txt还需要:

  • GLM(数学库)

  • ASSIMP(模型加载库)

  • freetype(字体渲染)

  • irrKlang(音频库)

不过对于基础示例(如第一章),你只需要GLFW和GLAD。

完整修改步骤

  1. 修改CMakeLists.txt

    • 删除或修改第2行 cmake_policy(VERSION 3.0)

    • 保存文件

  2. 清除CMake缓存

    • 在CMake GUI中点击"Delete Cache"

    • 删除E:\OpenTK\opengl\LearnOpenGL\build目录(如果存在)

  3. 重新配置

    • 在CMake GUI中设置源目录和构建目录

    • 点击"Configure"

    • 设置GLFW3_DIRglfw3_DIR为你GLFW的路径

  4. 处理其他缺失依赖
    如果提示找不到GLM、ASSIMP等,可以暂时在CMakeLists.txt中注释掉:

    cmake

    # find_package(ASSIMP REQUIRED)  # 暂时注释
    # find_package(GLM REQUIRED)     # 暂时注释
  5. 只编译第一章
    如果你想先测试最简单的程序,可以临时修改CMakeLists.txt,只编译第一章:

    cmake

    # 注释掉其他章节,只保留第一章
    set(CHAPTERS
        1.getting_started
        # 2.lighting      # 注释掉
        # 3.model_loading # 注释掉
        # ...            # 注释掉其他
    )

请先修改第2行的cmake_policy问题,然后告诉我错误是否解决?如果还有新的错误,请提供具体的错误信息。

The C compiler identification is MSVC 19.44.35213.0 The CXX compiler identification is MSVC 19.44.35213.0 Detecting C compiler ABI info Detecting C compiler ABI info - done Check for working C compiler: D:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe - skipped Detecting C compile features Detecting C compile features - done Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done Check for working CXX compiler: D:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe - skipped Detecting CXX compile features Detecting CXX compile features - done Found GLM: E:/OpenTK/opengl/LearnOpenGL/includes GLM_INCLUDE_DIR = E:/OpenTK/opengl/LearnOpenGL/includes GLM included at E:/OpenTK/opengl/LearnOpenGL/includes Found GLFW3: E:/OpenTK/opengl/LearnOpenGL/lib/glfw3.lib Found GLFW3 in E:/OpenTK/opengl/LearnOpenGL/includes Found ASSIMP: E:/OpenTK/opengl/LearnOpenGL/lib/assimp.lib Found ASSIMP in E:/OpenTK/opengl/LearnOpenGL/includes Configuring done (16.4s) Generating done (2.5s) 这是不是生成这个了

是的!恭喜你,CMake配置成功了! 从输出信息可以看到:

成功标志

  1. ✅ 编译器识别成功:MSVC 19.44.35213.0 (VS2022)

  2. ✅ 所有关键库都找到了

    • GLM:数学库 ✓

    • GLFW3:窗口库 ✓(注意它找到了E:/OpenTK/opengl/LearnOpenGL/lib/glfw3.lib,这可能是项目自带的库)

    • ASSIMP:模型加载库 ✓

  3. ✅ 最后两行显示成功

    • Configuring done (16.4s)

    • Generating done (2.5s)

这意味着VS2022解决方案文件已经生成完成

下一步操作

1. 打开生成的VS项目

在CMake GUI中:

  • 点击 "Open Project" 按钮

  • 或者手动打开生成的文件:

    text

    E:\OpenTK\opengl\LearnOpenGL\build\LearnOpenGL.sln

2. 在VS2022中操作

  1. 选择启动项目:解决方案中会有很多项目(每个示例一个),比如:

    • 1.getting_started__1.1.hello_window

    • 1.getting_started__1.2.hello_window_clear

    • 等等

  2. 设置为启动项目:右键点击你想运行的示例项目 → 选择 "设为启动项目"

  3. 编译运行:按 F5 或点击 "本地Windows调试器"

3. 可能的运行时问题

虽然编译配置成功了,但运行时可能需要:

A. DLL文件复制

项目可能需要一些DLL文件。检查:

text

E:\OpenTK\opengl\LearnOpenGL\bin\  # 输出目录

如果运行时提示缺少DLL,需要将以下DLL复制到exe所在目录:

  • glfw3.dll(从你的GLFW包:D:\opengl\glfw-3.4.bin.WIN64\lib-vc2022\

  • assimp.dll(如果ASSIMP是动态链接)

B. 资源文件路径

LearnOpenGL示例需要shader文件、纹理等。查看CMakeLists.txt中的这部分:

cmake

# copy shader files to build directory
file(GLOB SHADERS "src/${chapter}/${demo}/*.vs" ...)

这些文件应该会自动复制到输出目录,但如果没有,可能需要手动复制。

4. 测试最简单的示例

建议先运行第一章的第一个示例:

  • 项目名:1.getting_started__1.1.hello_window

  • 这是一个简单的OpenGL窗口,最容易调试

快速验证步骤

  1. 打开解决方案E:\OpenTK\opengl\LearnOpenGL\build\LearnOpenGL.sln

  2. 找到hello_window项目:在解决方案资源管理器中

  3. 编译运行:按F5

  4. 结果

    • 成功 → 出现一个OpenGL窗口

    • 失败 → 告诉我具体的错误信息

注意事项

你的GLFW库是从D:\opengl\glfw-3.4.bin.WIN64找到的,但CMake显示它使用了项目自带的E:/OpenTK/opengl/LearnOpenGL/lib/glfw3.lib。这没问题,但如果运行时需要glfw3.dll,请确保使用匹配的版本。

...全文
78 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3

社区成员

发帖
与我相关
我的任务
社区描述
openTK、OpenGL、WebGL技术学习交流
图形渲染c#程序人生 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • 亿只小灿灿
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧