如何在VSCode中为CMake目标设置工作目录?
在CMake中为目标指定运行时工作目录
跨平台配置方案
1. 针对Visual Studio(Windows)
直接使用CMake的VS_DEBUGGER_WORKING_DIRECTORY属性,该属性会直接写入VS项目配置,调试时自动以指定目录作为工作目录:
set_target_properties(App PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/App" )
2. 针对Makefile/Ninja(Linux)
CMake本身没有为终端类生成器内置运行时工作目录属性,但可以自定义一个运行目标来实现目录切换:
add_custom_target(run_App COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_SOURCE_DIR}/App" $<TARGET_FILE:App> DEPENDS App COMMENT "Running App with working directory set to App/" )
之后执行make run_App或ninja run_App,程序就会在App目录下启动,代码里直接用assets/image.png即可读取文件。
兼容多IDE的通用方案
如果同时使用VSCode、CLion这类IDE,可以在CMake中定义一个内部变量,让IDE读取该路径设置工作目录:
set(APP_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/App" CACHE INTERNAL "Working directory for App target")
- VSCode中修改
.vscode/launch.json,添加cwd字段指向该变量:{ "name": "Debug App", "type": "cppdbg", "request": "launch", "program": "${command:cmake.launchTargetPath}", "cwd": "${cmake:APP_WORKING_DIRECTORY}", // 其他调试配置项... } - CLion中直接在Run/Debug配置里将工作目录设为该路径即可,和你之前的操作逻辑一致。
备选方案:复制资源到构建目录
要是不想折腾工作目录设置,也可以在构建阶段把assets目录复制到程序输出目录:
add_custom_command(TARGET App POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/App/assets" "$<TARGET_FILE_DIR:App>/assets" COMMENT "Copying assets to build directory" )
这样无论工作目录是build还是其他路径,代码里的assets/image.png都能正常加载。
内容的提问来源于stack exchange,提问作者Vinicius Almada
相关产品推荐
相关产品推荐

