1、vscode中的变量
https://code.visualstudio.com/docs/editor/variables-reference
预定义变量
${workspaceFolder} - /home/your-username/your-project
${workspaceFolderBasename} - your-project
${file} - /home/your-username/your-project/folder/file.ext
${relativeFile} - folder/file.ext
${relativeFileDirname} - folder
${fileBasename} - file.ext
${fileBasenameNoExtension} - file
${fileDirname} - /home/your-username/your-project/folder
${fileExtname} - .ext
${lineNumber} - line number of the cursor
${selectedText} - text selected in your code editor
${execPath} - location of Code.exe
当预定义变量满足不了使用需求时,可以在 VSCode 中设置自定义变量,并通过 ${config:Name} 的方式调用
2、如何设置自定义变量
自定义变量可以在 settings.json 中配置,即 VSCode 的 setting 文件。VSCode 设置分为 “用户配置” 和 “工作区配置”
对应的 settings.json 也有两个。对于通用配置,可以在 “用户配置” 中添加;而针对于工作区的特殊情况,则可以在 “工作区配置” 中添加。
2、配置文件详解
launch.json介绍
{
"version": "0.2.0", //版本信息
"configurations": [
{
},
{
// 配置名称,将会在启动配置的下拉菜单中显示
"name": "C++ Launch (GDB)",
// 配置类型,这里只能为cppdbg
"type": "cppdbg",
// 请求配置类型,可以为launch(启动)或attach(附加)
"request": "launch",
// 调试器启动类型,这里只能为Local
"launchOptionType": "Local",
// 生成目标架构,一般为x86或x64,
// 可以为x86, arm, arm64, mips, x64, amd64, x86_64
"targetArchitecture": "x86",
// 将要进行调试的程序的路径
"program": "${workspaceRoot}",
// 程序调试时传递给程序的命令行参数,一般设为空即可
"args": [],
// 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
"MIMode": "gdb",
// miDebugger的路径,注意这里要与MinGw的路径对应
"miDebuggerPath":"D:\\mingw\\bin\\gdb.exe",
// 设为true时程序将暂停在程序入口处,一般设置为false
"stopAtEntry": false,
// 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"cwd": "${workspaceRoot}",
// (环境变量?)
"environment": [],
// 调试时是否显示控制台窗口,一般设置为true显示控制台
"externalConsole": true,
// 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
"internalConsoleOptions": "neverOpen",
// 用处未知,模板如此
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
// 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
"preLaunchTask": "g++"
}
]
}
launch.json示例:
{
"version": "0.2.0",
"configurations": [
{
"name": "cctest",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/cctest",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:/wecode_build_tools/mingw/bin/gdb.exe",
"preLaunchTask": "Build",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "test_cctest",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/test_cctest",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:/wecode_build_tools/mingw/bin/gdb.exe",
"preLaunchTask": "Build",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
task.json介绍
{
"version": "2.0.0",
//每次执行都启动一个新的控制台
"presentation": {
"reveal": "always",
"panel": "new",
"echo": true
},
//设置环境变量
"options": {
"env": {
"LINUX_SRC_HOME": "/home/user/system/packages/services/Car/evs",
"LOCAL_SRC_HOME": "${workspaceRoot}"
}
},
"type": "shell",
"problemMatcher": {
"owner": "vs_code",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": ".*(app/.*|project/.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
//任务列表
"tasks": [
{
"label": "01.[同步代码]本地代码->Linux远程服务器",
"command": "${workspaceRoot}\\.vscode\\sync_code.cmd",
"args": [
"native",
"False"
],
"identifier": "CodeSync",
"taskClassify": "同步代码"
},
{
"label": "02.[同步代码并获取修改文件列表]本地代码-->Linux远程服务器",
"command": "${workspaceRoot}\\.vscode\\sync_code.cmd",
"args": [
"native",
"True"
],
"identifier": "CodeSyncDiff",
"taskClassify": "同步代码"
},
{
"label": "03.[编译IT]在Linux远程服务器上编译IT工程",
"dependsOn": "CodeSync",
"command": "${workspaceRoot}\\.vscode\\build_obj.cmd",
"args": [
"test",
"DTCenter.out",
"it_cfg",
"Debug",
"-j8",
"cache"
],
"taskClassify": "编译IT工程"
},
{
"label": "04.[同步+编译+IT]在Linux远程服务器上构建IT工程并运行",
"dependsOn": "CodeSync",
"command": "${workspaceRoot}\\.vscode\\build_and_run_IT.cmd ratmng.nrom.cfgslave",
"taskClassify": "同步+编译+IT工程"
},
{
"label": "05.[静态检查]代码静态检查",
"dependsOn": "CodeSyncDiff",
"command": "${workspaceRoot}\\.vscode\\inc_build_flint.cmd",
"taskClassify": "flint"
},
{
"label": "06.[增量构建] 代码增量compile",
"dependsOn": "CodeSyncDiff",
"command": "${workspaceRoot}\\.vscode\\inc_build_compile.cmd",
"taskClassify": "增量编译"
}
]
}
task.json示例
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceRoot}",
"env": {
"PATH": "D:\\wecode_build_tools\\mingw\\bin;${env:PATH}"
},
"shell": {
"executable": "${env:SystemRoot}\\System32\\cmd.exe",
"args": [
"/C"
]
}
},
"problemMatcher": "$wecodeCpp",
"type": "shell",
"tasks": [
{
"label": "Configure this project",
"command": "cmake.exe -DCMAKE_TOOLCHAIN_FILE=..\\cmake\\toolchain.cmake -S . -B .\\build -G Ninja",
"detail": "Build之前必须先执行此Config命令,生成Ninja构建工程,否则会出错"
},
{
"label": "Build",
"command": "cmake --build build --target all",
"dependsOn": [
"Configure this project"
],
"detail": "执行增量的构建"
},
{
"label": "Rebuild all",
"command": "cmake --build build --target all --clean-first --",
"dependsOn": [
"Configure this project"
],
"detail": "重新执行所有构建"
},
{
"label": "Clean Build",
"command": "cmake --build build --target clean --",
"detail": "删除构建过程中的所有中间文件"
},
{
"label": "Run",
"command": ".\\bin\\cctest.exe",
"detail": "执行编译出来的目标程序"
},
{
"label": "Build & Run",
"dependsOrder": "sequence",
"dependsOn": [
"Build",
"Run"
],
"detail": "执行增量构建并运行目标程序"
},
{
"label": "Open Shell for mingw",
"command": "cmd.exe",
"detail": "打开mingw的Shell 窗口"
},
{
"label": "Run test",
"command": "cd build && cmake --build . --target all && ctest -j14 -C Debug -T test --verbose",
"detail": "执行测试"
}
]
}