⚠ 感觉工作区方式不适合我,仅供大家参考;
一些介绍
使用 VSCode 打开一个目录,适合单项目开发;
使用 VSCode 的工作区功能,适合多个项目的管理,每个项目中均可有一个“.vscode”文件夹;
开始
规划
.../vscode/
作为工作区目录;.../vscode/prj1/
作为项目1目录;.../vscode/prj2/
作为项目2目录;
将工作区另存为
初次打开 VSCode,点击“文件” –> “将工作区另存为” –> “输入路径和名称保存:.../vscode/mywork
”;
这里我输入名称为 .../mywork
,点击确定后会生成 .../mywork.code-workspace
文件;
复制工程到工作区目录
复制我已有的工程目录到 .../vscode/
目录。放其他目录也可以,便于理解我就放在了工作区下;
在工作区中添加工程
当工作区没有任何工程时,点击“添加文件夹”即可,选择上一步的项目目录;
当工作区已经有工程存在,在工作区面板右键选择“将文件夹添加到工作区”,然后选择项目目录;
给每个工程添加运行和任务
每个工程单独设置运行和任务配置。当前活动的工程不同${workspaceFolder}
的值也是不同的,所以 tasks.json 尽可能使用含有 ${workspaceFolder}
的路径;
VSCode 上的设置
c_cpp_properties
如果你编写 Linux 驱动,最好给工程指定头文件路径和宏,否则会很难找到头文件;
按快捷键“Ctrl + Shift + P”,然后搜索>Edit configurations
,单击后会打开一个 c_cpp_properties.json 文件:
samsung s3c24xxx 才按照下面添加,具体的参见:https://blog.csdn.net/ningjianwen/article/details/88075042
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/linux-3.10/include",
"${workspaceFolder}/linux-3.10/arch/arm/plat-samsung/include",
"${workspaceFolder}/linux-3.10/arch/arm/mach-s3c24xx/include"
],
"defines": [
"__KERNEL__"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
launch
所有的 launch 会放在调试面板,加后缀区分工程;
当有多个工程时:
pwd
默认指示第一个工程的路径,所以调用的脚本尽可能使用dirname $0
替代pwd
;
建议有两个:gdb 和 arm-gdb;
完整 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/Prj/Linux/Output/Exe/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "(arm-gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/Prj/Linux/Output/Exe/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/arm-linux-gnueabihf-gdb",
"miDebuggerServerAddress": "192.168.2.2:7777",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
]
}
tasks
所有的 task 会放在“终端” –> “运行任务…”中,加后缀区分工程;
当有多个工程时:
pwd
默认指示第一个工程的路径,所以调用的脚本尽可能使用dirname $0
替代pwd
;
建议有:
- 编译
- 传送编译后文件
- 传送当前打开的文件
- 运行当前打开的脚本(仅sh)
完整 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "make",
"type": "shell",
"command": "cd ${workspaceFolder}/Prj/Linux;./automake.sh",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "trans",
"type": "shell",
"command": "${workspaceFolder}/Prj/Linux/Tools/x86/file_send_client",
"args": [
"192.168.2.2",
"10069",
"${workspaceFolder}/Prj/Linux/Output/Exe/main",
"/root/mywork",
"mod",
"0755"
],
},
{
"label": "trans activity file",
"type": "shell",
"command": "${workspaceFolder}/Prj/Linux/Tools/x86/file_send_client",
"args": [
"192.168.2.2",
"10069",
"${file}",
"/root/mywork",
"${fileBasename}",
"0755"
],
},
{
"label": "run activity sh script",
"type": "shell",
"command": "chmod +x ${fileDirname}/${fileBasenameNoExtension}.sh;${fileDirname}/${fileBasenameNoExtension}.sh",
}
]
}
快捷键
所有工程共用一套快捷键,按下后会依次从最上方的工程向下找对应的任务执行,所以建议把目标工程移动到工作区最上方;
移动工程到工作区最上方的方法:
建议有:
- 编译:
ctrl + shift + 6
- 传送编译后文件:
ctrl + shift + 7
- 传送当前打开的文件:
ctrl + shift + 8
- 运行当前打开的脚本(仅sh):
ctrl + shift + 9
完整 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
// 将键绑定放在此文件中以覆盖默认值
[
{
"key": "ctrl+shift+6",
"command": "workbench.action.tasks.runTask",
"args": "make"
},
{
"key": "ctrl+shift+7",
"command": "workbench.action.tasks.runTask",
"args": "trans"
},
{
"key": "ctrl+shift+8",
"command": "workbench.action.tasks.runTask",
"args": "trans activity file"
},
{
"key": "ctrl+shift+9",
"command": "workbench.action.tasks.runTask",
"args": "run activity sh script"
}
]
端口映射
在“Remote - SSH”插件面板中直接设置转发的端口即可;
代码高亮
方法一:(不建议)
在 settings.json 中自定义高亮色;
1
2
3
4
5
{
"workbench.colorCustomizations": {
"editor.selectionHighlightBackground": "#c5293e"
}
}
方法二:
安装“highlight-words”插件;
选中关键字后,命令面板输入 >Highlight Toggle Current
设置高亮;
- Highlight Remove:在命令行取消高亮(单个/文本块/全部);
- Highlight Remove All:取消全部高亮;
- Highlight Toggle Current:对单个字符串进行 高亮/取消,使用鼠标选中文本块时,可高亮整个文本块。