Visual Studio 2022 CMake项目设置调试工作目录失效如何解决
Visual Studio 2022 CMake模式调试工作目录配置不生效解决
问题现象
开发OpenGL学习项目时,从传统VS解决方案-项目模式切换为CMake项目模式后,需要从LearnOpenGL/Resources目录加载.obj模型、着色器等资源文件,但C++代码中的相对路径默认以LearnOpenGL/out/build/x64-Debug/为根目录,资源加载失败。
已尝试以下两种配置方式均未生效:
- 为目标
LearnOpenGL设置VS_DEBUGGER_WORKING_DIRECTORY属性(已测试路径不带末尾斜杠的写法),配置代码如下:set_property(TARGET LearnOpenGL PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/") - 在
CMakeSettings.json中分别添加currentDir、cwd配置项,取值为"${projectDir}",配置片段如下:"currentDir": "${projectDir}" "cwd": "${projectDir}"
所有修改完成后重新生成、重启VS均无效果。
失效原因
两种配置不生效的核心原因是配置项和使用的CMake模式不匹配:
VS_DEBUGGER_WORKING_DIRECTORY是CMake面向VS生成.sln解决方案时才会识别的属性,如果你使用VS默认的"打开文件夹"加载CMake项目的模式,这个属性不会被调试器读取。CMakeSettings.json中不存在currentDir、cwd这两个合法的调试工作目录配置键,写入后不会被解析。
可行配置方案
根据需求二选一即可:
方案1:单目标独立配置(推荐)
仅针对指定可执行文件设置工作目录,不影响同项目下其他目标:
- 在VS解决方案资源管理器中右键项目根目录,选择「添加」→「调试配置」,选中你要调试的
LearnOpenGL.exe目标,VS会自动生成launch.vs.json配置文件。 - 在生成的对应配置块中,将
cwd字段的值修改为你需要的工作目录,若要指向项目根目录可直接使用${workspaceRoot}变量,示例配置:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "LearnOpenGL.exe", "name": "LearnOpenGL.exe 调试", "cwd": "${workspaceRoot}" } ] }
- 保存文件后直接启动调试即可生效,无需重新生成CMake缓存。
方案2:全局默认配置
为当前CMake配置下所有可执行目标统一设置默认调试工作目录:
- 打开项目根目录下的
CMakeSettings.json,找到你当前使用的编译配置块(比如x64-Debug),添加debuggerWorkingDirectory字段,取值为目标工作目录,示例:
{ "configurations": [ { "name": "x64-Debug", "generator": "Ninja", "configurationType": "Debug", "inheritEnvironments": [ "msvc_x64_x64" ], "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "", "ctestCommandArgs": "", "debuggerWorkingDirectory": "${projectDir}" } ] }
- 修改完成后点击VS顶部工具栏的「重新生成CMake缓存」按钮,缓存生成完成后即可生效。
如果需要同时兼容"打开文件夹"和"生成.sln"两种使用模式,可以同时保留VS_DEBUGGER_WORKING_DIRECTORY配置和上述两种配置之一,不同模式会自动读取自身支持的配置项,不会产生冲突。
内容的提问来源于stack exchange,提问作者OftenDeadKanji
相关产品推荐
相关产品推荐

