VS code 是一个非常不错的代码编辑器。它不依赖与任何编译器或者解释器,但却能高效的利用第三方编译器或解释器来给用户提供良好的代码编写环境。
我喜欢VS code的三点,丰富强大的插件,快捷的语法分析自动补全和自动转跳功能,集成Git管理与Debug功能。
丰富强大的插件
第一个功能不必说,他是VScode的强大支柱,我可以找到自己喜欢的主题插件,字体或者语言支持插件等,有了它,VScode能给人更多的惊喜,和附加的功能,这些功能等着我们去探索。就比如我要想显示一个二进制文件的二进制信息,找个插件就有了,要写markdown,cmakelist没有语法高亮很难受?去插件商店里找找就有了。这个主题不好看,想换个主题,也可以通过换插件的形式来完成。想写Latex文档,没有代码提示,商店里也有相应的功能支持,习惯了Vim或Emacs键位?商店里也有。
官方C/C++智能插件
这个确实很智能,速度很快,力推。比如C/C++项目,下载C/C++那个C/C++ IntelliSense, debugging, and code browsing 插件加上一个编译器调试器就能提供第二个功能,而且配置还很简单快捷。想想在Emacs上或者Vim想实现代码自动补全和转跳功能都困难成啥样了。至少对新手来说花费的时间代价已经远远超过安装VScode所费的时间了,而VScode安装了就能用的。
好现在来看看实现第二个功能到底有多简单
-
1、安装C/C++ IntelliSense, debugging, and code browsing. 插件
-
2、安装编译器调试器,比如gcc,Linux下一般都直接集成了,windows下一般只要下载mingw就可以下全编译和调试的功能,百度mingw进入官网下载,可以选择下载mingw-get-setup.exe,然后再里面选择想要的gnu产品,然后就添加bin目录到系统环境
下载好后还要添加到系统环境中才能方便VScode构建项目时调用哦。
-
3、接下来我们需要三个json配置文件c_cpp_properties.json,launch.json,tasks.json,它们的作用分别是为插件提供智能代码语法分析依据,启动调试文件、构建任务文件。
我们可以在全局中生成配置,也可以只争对某个项目而在局部中生成。例如对于项目,我们可以Ctrl+shift+p然后输入c/c++,之后选择UI的形式打开或者json文本形式打开
然后就可以进行编辑,比如下面的例子中我用的是clang编译器作为代码分析工具,下面的配置就是在通知c/c++那个官方的智能提示插件说你的代码语法分析要能通过clang编译器的审核,所以哪里有问题,哪里获得库文件都是clang说了算,于是这个插件就会每次输入代码时去调用clang编译器在后台悄悄编译并做语法分析,哪里编译不通过就会返回给用户说你哪个文件第几行第几列有问题,不过呢,由于这里clang因为本身没有提供指定操作系统的连接器,我这里把它的目标给了x86_64-pc-mingw32,指明它在编译的时候生成的是mingw那套程序,所以遇到系统调用相关的头文件以及在链接的时候都还需要gnu的头文件和连接器,这是编译的附加选项compilerArgs。如果你用的是gcc编译器,用的本身就是gnu自家的东西,它自然不需要你指明用mingw里面的库和链接器。includePath
常用来指明项目本身的头文件。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "E:\ProgramFiles\LLVM\bin\clang++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
"compilerArgs": [
"--target=x86_64-pc-mingw32"
]
}
],
"version": 4
}
OK啦,做到这一步一般来说你以及拥有了一个很不错的代码智能提示和补全的编辑器了,就只是下载了一个插件和一个编译器,然后你就可以尽情的写代码了。你可以用第三方项目构建管理工具在终端命令行上完成你的项目构建。值得一提的是,如果是交叉编译,VScode也是支持的,只要把编译器换成交叉编译的编译器,然后交叉平台上的头文件也可以包含在里面,然后让智能插件去分析代码语法和自动补全以及代码转跳。
- 4、接下来如果你不满足与每次都要在命令行上敲代码,想要更加的快捷自动化,那么你可以用VScode的另外的配置文件,它将帮你快速的进行代码构建和调试。我们可以通过新建一个任务配置来创造一个快捷编译功能。同样是Ctrl+shift+p然后输入task
这里有好多的任务模板,你可以选择你想要的那个构建任务,比如你要创建一个编译当前文件并生成可执行文件的任务。下面的示例代码就是对单个文件进行编译的任务,当调用这个任务时,${file}
会获取你当前正在编辑文件的文件名,而我们把它作为g++的输入参数,输出我则是放在当前工作目录下的一个build目录,并给与的名字和文件名相同,而这通过下面一句${workspaceFolder}\build\${fileBasenameNoExtension}.exe
就能简单完成。同时我们指定的这个任务是在终端完成的,所以任务类型设置为shell。而终端任务说白了就是一个能一键自动帮你完成所有需要输入终端命令的操作,他会根据这些信息进行匹配。然后在传递给终端,终端通过环境变量来进行多个程序调用相互,最终输出我们想要的结果。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build exe",
"command": "g++",
"args": [
"-g",
"${file}",
"-o", // fileDirname, workspaceFolder
"${workspaceFolder}\build\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "E:\ProgramFiles\mingw64\bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
如此以来我们想将当前代码编译成可执行文件,那么就只需调用这个task就行了,通过快捷键Ctrl+B或者在菜单栏->终端->运行生成任务。然后就会在build下看见对于当前文件名的可执行文件了。这时后仔细查看终端,我们发现,终端上有下面这样一条命令。这就印证了刚才我们说的,VScode执行任务时其实就是在调用终端,帮我们自动输入了指令。
可以看到,生成的main.exe以及放到build目录下了。
- 5、vscode按下F5可以调用launch.json配置,比如以下配置是提供gdb调试功能的,具体信息代码里面有解释,和task类似不多说了。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\build\${fileBasenameNoExtension}.exe", // 将要调试的程序目录
"args": [], // 调试时传递给程序的命令行参数,一般为空即可
"stopAtEntry": false, // 设置true时程序将暂停在入口处,一般设置为false
"cwd": "${workspaceFolder}\files", // 程序调试时的工作目录,可用于管理调试生成的文件
"environment": [], //
"externalConsole": false, // 启用窗口控制台
"internalConsoleOptions": "neverOpen", // 如果不设置为neverOpen,调试时回调到
"MIMode": "gdb", // 指定连接的调试器
"miDebuggerPath": "E:\ProgramFiles\mingw64\bin\gdb.exe", //调试器路径
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
通过简单的配置我们就能达到非常强大的功能,真的是很不错。
集成Git
不错,集成Git在代码管理发布确实更为方便了不少,而Git的使用则是另一回事了,但总之如果你用过Git你再来用VScode你会发现,当pull有冲突时,它可以帮你清爽的提示出来,还有一键和远端同步或push远端版本,真是不错呢。