如何配置VSCode与Rust,实现指定项目的二进制文件执行?
解决多Rust子项目VSCode运行/调试配置问题
当前项目包含多个lesson子项目(每个子项目均有Cargo.toml及src/main.rs文件),编辑lesson_1/src/main.rs时,希望通过Ctrl+F5或F5快捷键,实现等同于在lesson_1目录下执行cargo run的效果。此前配置后出现错误:
error: could not find
Cargo.tomlin/home/me/projects/my_rust_projector any parent directory
原配置文件如下:
原.vscode/launch.json
{ "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug", "program": "/usr/bin/cargo", "args": ["run", "${workspaceFolder}/<executable file>"], "cwd": "${workspaceFolder}" } ] }
原.vscode/tasks.json
{ "version": "2.0.0", "tasks": [{ "label": "cargo build", "type": "shell", "command": "cargo build", "args": [], "group": { "kind": "build", "isDefault": true } }, { "label": "cargo run", "type": "shell", "command": "cargo", "args": [ "run" // "--release", // "--", // "arg1" ], "group": { "kind": "build", "isDefault": true } }] }
正确配置方案
核心问题是原配置的cwd固定为根工作区目录,导致cargo找不到当前子项目的Cargo.toml。需要将cwd动态设置为当前编辑文件所在的子项目根目录。
修改后的.vscode/launch.json
{ "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug Current Subproject", "program": "${fileDirname}/../target/debug/${fileBasenameNoExtension}", "args": [], "cwd": "${fileDirname}/..", "preLaunchTask": "cargo build current subproject" } ] }
修改后的.vscode/tasks.json
{ "version": "2.0.0", "tasks": [ { "label": "cargo build current subproject", "type": "shell", "command": "cargo build", "args": [], "cwd": "${fileDirname}/..", "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$rustc"] }, { "label": "cargo run current subproject", "type": "shell", "command": "cargo run", "args": [], "cwd": "${fileDirname}/..", "group": { "kind": "test", "isDefault": true }, "problemMatcher": ["$rustc"] } ] }
关键修改说明
cwd设置:使用${fileDirname}/..,表示当前编辑文件所在目录的上一级(也就是子项目根目录,比如编辑lesson_1/src/main.rs时,cwd就是lesson_1),让cargo能找到对应的Cargo.toml。- launch.json的program路径:改为
${fileDirname}/../target/debug/${fileBasenameNoExtension},动态指向当前子项目编译后的可执行文件。 - 预启动任务:launch.json中添加
preLaunchTask关联到对应的build任务,确保调试前先编译当前子项目。 - 任务标签更新:给任务添加明确的名称,避免和全局任务混淆,同时保留默认构建/运行任务的设置。
配置完成后,编辑任意子项目的main.rs时,按下F5(调试)或Ctrl+F5(运行),就会自动在该子项目目录下执行对应的cargo命令,解决找不到Cargo.toml的问题。
内容的提问来源于stack exchange,提问作者Artur Barseghyan
相关产品推荐
相关产品推荐

