在VSCode中写简单的C++程序,vscode程序
分享于 点击 34561 次 点评:109
在VSCode中写简单的C++程序,vscode程序
前言
毕业后终于有了一点空闲时间,可以来继续倒腾倒腾自己的电脑了。自然想起了微软大爷的一堆东西,便想先搞搞VSCode试试。
事出有因,作为一个编程小白,以前写程序都是用微软各版本的航母VisualStudio,虽说性能分析、语法纠错什么的蛮好用,但还是想再试着配置一下轻量级的编辑器,以为能加深自己对程序实现过程的理解吧。年少无知的时候折腾过Vim、Emacs、Atom、Editplus,但都不很如意。一方面是没有坚持下来长时间写程序,导致没有形成自己的习惯;另一方面也是因为平时更经常看用MATLAB,对编程的理解始终感觉不到位。
查到很多个配置方案并一个一个试过后,终于实现了用VSCode写程序的第一步。开始折腾!
准备工作
编译器
关于编译器,据说:
1. 可以选择LLVM、MinGW64、Tdm-gcc等主流编译环境的其中一个。其中LLVM前端(词法、语法分析、语义分析、生成中间代码)使用的是clang,效率上优于后面三个所使用的gcc。(2018.3.)
2. 在 Windows 下安装 Clang 是一件不太愉快的事情,如果在安装时遇到困难,大可放弃安装 Clang ,转而安装 GCC。(2017.8.)
作为小白,尽管看了些讲LLVM和GCC区别的文章,但是并不能很好地体会到两者的区别。也看到很多配置里,将intelliSenseMode改为clang-x64,但是其command设置是g++,仿佛是将LLVM和MinGW64混合起来了一样。暂时没有搞懂,详情再看。
另外我发现,截止目前的LLVM已经将clang更新到6.0.0版本,对于Windows来说安装已经非常友好了。加上本来就安装好的MinGW64,我也打算把这两个都搞出来得了!
- 编译器下载安装包还是压缩包无所谓,重点是要确认系统环境变量路径中有
**\LLVM\bin
和**\MinGW64\bin
这两个。个人感觉安装包似乎好管理一些。
工具插件
方案
- 听说了各种都能配置好的方案,我挑了其中相当简单的一种自己实现了出来。没有什么Makefile跨平台这类高级操作,完全依赖 VS Code内置工具实现工作环境配置。
- 依下面顺序进行各个配置文件的更改。如果复制进文件保存时候报错,去掉中文注释内容即可。
c_cpp_properties.json 配置
- 在这个配置文件中,目前猜测主要确定了C++调用头文件的位置,其他功能还需细看发现。有些方案中,看到这里除了Win32之外还有Ubuntu、mac等名称,暂且按下不提。
{
"configurations": [
{
"name": "Win32",
"intelliSenseMode": "clang-x64",
// 此处设置包含系统环境路径
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=7",
"__cdecl=__attribute__((__cdecl__))"
],
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
]
},
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
// 此处设置编译器路径,应将其更改为自己的g++.exe所在路径
"compilerPath": "E:/Environment/MinGW64/bin/g++.exe",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
tasks.json配置
- tasks是在F1的命令行中键入Tasks: Run Task后生成的模板中更改的。据不成熟的理解,这个文件限定了当前文件执行任务的过程和属性。
{
"version": "2.0.0",
"tasks": [
{
"label": "Compile",
"command": "g++",
"args": [
"-g",//指定编译源代码文件
"${file}",
"-o",// 指定输出文件名,不加该参数则默认输出a.exe
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-ggdb3", // 生成和调试有关的信息
"-Wall", // 开启额外警告
"-static-libgcc", // 静态链接
"-Wno-format",
"-finput-charset=UTF-8",//输入编译器文本编码 默认为UTF-8
"-fexec-charset=GBK"//编译器输出文本编码 自行选择
],
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative","\\"
],
"pattern":{
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
launch.json配置
- launch似乎是在按下F5时“运行”的文件。刚开始每次编译运行都要通过F1打开的命令行中运行task,然后才可以用F5和Ctrl+F5运行编译生成的exe文件。有了”preLaunchTask”之后,就可以直接与tasks中的各项任务相绑定,大大减小了编译时耗费的心力和时间。
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (GDB)", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"targetArchitecture": "x64", // 生成目标架构,一般为x86或x64
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡",
"MIMode": "gdb", // 指定连接的调试器
"miDebuggerPath": "E:/Environment/MinGW64/bin/gdb.exe", // 调试器路径
"setupCommands": [
{
"description": "Enable pretty-printing for GDB",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
// 此处设置按下F5调用的tasks.json中的任务标签label
"preLaunchTask": "Compile"
}
]
}
settings.json配置
- 这个好像随意配置……我也把我改的一些放上来吧。
- 原理是从默认配置中复制相关设置到用户设置空间并覆盖默认设置,这个设定感觉相当棒!不会清除默认配置,又可以实现用户自定义配置。以这种形式实现我倒是第一次发现。
{
"workbench.colorTheme": "Hopscotch",
"atomKeymap.promptV3Features": true,
"editor.multiCursorModifier": "ctrlCmd",
"editor.fontSize": 16,
"files.associations": {
"*.json": "jsonc",
"*.cfg": "ini",
"*.fsh": "glsl",
"stack": "cpp",
"iostream": "cpp",
"ostream": "cpp",
"*.tcc": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"exception": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"istream": "cpp",
"limits": "cpp",
"new": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"system_error": "cpp",
"type_traits": "cpp",
"typeinfo": "cpp",
"utility": "cpp"
},
"editor.snippetSuggestions": "top",
"C_Cpp.clang_format_sortIncludes": true,
"editor.wordWrap": "on",
"editor.formatOnPaste": true,
"editor.formatOnType": true,
}
其他
总结
- 更多详细内容,且听下回分晓。工地上事情马上就要多起来了,希望能有集中的时间再玩下去。
- 本文暂时只实现了VSCode中编译C++程序的最简单配置,能够运行书上的各种练习程序。
- 今日时间不够,下次再说碰到的各种问题。
相关文章
- 暂无相关文章
用户点评