本文基于 wsl1 配置,wsl2 暂未试过。
参考vscode官方基于wsl cpp环境配置: https://code.visualstudio.com/docs/cpp/config-wsl
首先设定一下自己的目录结构:
1 2 3 4 5 6
| | .vscode // vscode的配置文件,下文的tasks.json、launch.json都在这里 | workspace // 自己的工作目录 | --| build // 编译的结果会在这个目录 | --| main.cpp // 主文件 | otherfolder // 如果做成git仓库,可以这里归档自己的代码 | .gitignore // git仓库忽略的文件,可以忽略 .vscode 和 workspace 这两个目录
|
安装vscode、wsl,vscode的file菜单勾上 Auto Save
vscode 安装 WSL扩展、C/C++扩展(in wsl)
让vscode进入wsl状态(左下角点击后选择),建立一个工作目录并让vscode打开该工作目录。
build 配置
打开一个cpp文件,菜单的 Terminal 打开 Configure Default Build Task...
,选择g++ build active file
自动生成tasks.json
,修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "start g++ build active file", "command": "mkdir -p ${workspaceFolder}/workspace/build && g++ ${file} -g -o ${workspaceFolder}/workspace/build/${fileBasenameNoExtension} && ${workspaceFolder}/workspace/build/${fileBasenameNoExtension}", "args": [], "options": { "cwd": "/usr/bin" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true } }, { "type": "shell", "label": "g++ debug", "command": "mkdir -p ${workspaceFolder}/workspace/build && g++ ${file} -g -o ${workspaceFolder}/workspace/build/${fileBasenameNoExtension}", "args": [], "options": { "cwd": "/usr/bin" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": false } }, ] }
|
这里把指令直接写在一行里了。
把相似的内容写了两遍,主要是第二个task用于debug的launch.json
去调用。被调用的task省去了直接运行这一步,这样才能正常进入debug
设置了isDefault
,则Ctrl+Shift+B
就直接执行这个配置的build了。
这里指令全塞进配置里太长,也可以写成 “build and run” 脚本,在workspace
下建立build_script.sh
文件:
1 2 3 4
| mkdir -p $1/build && \ g++ $2 -g -o $1/build/$3 && \ cd $1/build/ && \ ./$3
|
这里用“cd” 是保证工作目录在build里,方便读写test.in
、test.out
等文件。
然后用task.json
的 command + args 调用(替换第一个task的两个地方):
1 2
| "command": "${workspaceFolder}/workspace/build_script.sh", "args": ["${workspaceFolder}/workspace", "${file}", "${fileBasenameNoExtension}"],
|
此时就可以Ctrl+Shift+B
执行cpp了
(其实Run菜单里会发现 ctrl+f5 可以 Run Without Debugging,或许不配这一坨也行?)
debug 配置
wsl中安装gdb
菜单的 Run 打开 Add Configuration...
选择 C++ (GDB/LLDB)
自动生成launch.json
,修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| { "version": "0.2.0", "configurations": [ { "name": "run g++ debug", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/workspace/build/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "g++ debug", "miDebuggerPath": "/usr/bin/gdb" } ] }
|
这里preLaunchTask
要与 tasks.json
的 label
对应,也就是对应了不带运行指令的task。
使用新的 C++ 特性
F1 菜单搜索选择 C/C++: Edit Configurations (UI)
,会生成一个c_cpp_properties.json
文件,可以把
1
| "cppStandard": "gnu++14",
|
改为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "clang-x64" } ], "version": 4 }
|
debug的glibc问题
1. 安装 glibc
1 2 3
| sudo apt install glibc-source cd /usr/src/glibc/ sudo tar -xvf glibc-*.tar.xz
|
2. 在 VSCode 文件夹下的launch.json
中添加以下内容:
1 2 3
| "sourceFileMap": { "/build/glibc-xxxxx": "/usr/src/glibc" }
|
修改 xxxxx 为报错提示中出现的glibc文件名:
1 2 3
| "sourceFileMap": { "/build/glibc-ZN95T4": "/usr/src/glibc" }
|
使用
ctrl+shift+b
编译+运行,在vscode下方的terminal里进行数据交互
f5
debug,也在terminal里。其它debug快捷键点菜单的Run查看。