第八章 vscode配置c/c++开发环境

目录

第一章 初次接触vscode
第二章 vscode快捷键的使用
第三章 vscode的界面配置
第四章 vscode作为Markdown编辑器
第五章 vscode进行git管理
第六章 vscode的迁移
第七章 vscode配置go语言开发环境
第八章 vscode配置c/c++开发环境

前言

平时工作用到的是c编程, 当都是在linux下编译, 在windows下编译的情况很少, 但是也是有的, 比如我们做的windows下的分析工具, 也是用c语言写的, 需要在windows下编译, 最早使用的是VC++ 6.0, 软件经典但很老久, 一些功能也不是很方便, 后来换了code block, 挺不错的, 这不最近习惯了vscode, 就想着看是否可以用vscode进行windows下的c开发, 在上网搜索一番后开始了自己的配置.

配置过程

  1. 因为是刚开始学习配置, 为了简便, 就自己新建一个简单点的c工程, 以免到时候有错误都不知道是代码本身的问题还是配置的问题.
  2. 简单工程能够编译的话说明配置上是可行的, 然后再进行复杂工程的编译.
  3. 还是以经典的'helloworld'开始, 首先自己创建一个helloworld目录, 然后新建一个helloworld.c文件, 敲入以下代码
#include <stdio.h>
int main()
{
    printf("hello world.\n");
}
  1. 到这里一个helloworld的工程就建好了, 后面就看怎么编译了, 我们把helloworld.c编译成helloworld.exe来运行.
  2. 说一下要用到的工具. c/c++插件, 可以在插件管理中搜索安装; mingw64(注意安装路径不要有空格), 这是编译调试工具(至于mingw64, mingw, sygwin的选择和区别, 可以参考这里)., 注意mingw64装好之后要配置环境变量哈, 安装配置方法网上很多, 这里提供一处做参考(https://www.cnblogs.com/bpf-1024/p/11597000.html).
  3. 在开始编译之前, 我们先来了解一点东西, 那就是vscode编译时要用到的两个文件'launch.json'和'task.json', 在官方说明里, 还有一个'c_cpp_properties.json'文件, 这里说一下它们各自的作用.

tasks.json (build instructions)
这个文件定义了编译的方法, 比如用哪个编译器, 编译时候的参数是啥, 目标文件等.
launch.json (debugger settings)
这是调试的配置, 在vscode里F5可以进行调试, 这里面指明用哪个调试器进行调试, 调试的是哪个程序, 也就是运行哪个task(和上面的task对应)
c_cpp_properties.json (compiler path and IntelliSense settings)
看官方说明这是配置编译器路径的, 但是在task.json中command参数就可以指定路径啊, 是不是之前没有command这个参数, 现在有这个参数了就用不到c_cpp_properties.json这个文件了呢(参考这里推测的). 没有细究这个问题, 反正我目前是没有用到这个文件.

  1. 好了, 了解了各个文件的作用之后, 现在就要开始配置这些文件了. 我们先看看编译过程是否可以, 先不调试. 也就是只配置task.json, 先不管launch.json.
    依次选择菜单"终端->配置默认生成任务", 然后选择"g++.exe build active file"生成一个默认的task.json文件, 可以发现它是在.vscode目录下的. 我们配置一下这个文件, 见如下注释:
{
    // 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "mybuild",  #给你的任务起一个名字
            "command": "D:\\mingw64\\bin\\g++.exe",  #这里指定你的编译器
            # args是一些编译参数的配置
            "args": [   
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "D:\\mingw64\\bin"  #和上面编译器路径对应
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

了解一下官方的说明:

The command setting specifies the program to run; in this case that is g++. The args array specifies the command-line arguments that will be passed to g++. These arguments must be specified in the order expected by the compiler. This task tells g++ to take the active file ({file}), compile it, and create an executable file in the current directory ({fileDirname}) with the same name as the active file but with the .exe extension (${fileBasenameNoExtension}.exe), resulting in helloworld.exe for our example.

  1. task.json配置好了, 我们就可以运行它了, 选择菜单"终端->运行任务", 根据配置, vscode会调用你指定的g++编译器, 然后根据你配置的编译参数对helloworld.c进行编译, 生成你指定的目标文件helloworld.exe.
    输出信息如下:


你可以使用" .\helloworld.exe"来运行程序, 此时会打印"hello world"字符串.

  1. 如果要调试程序, 需要告诉vscode用哪个工具来调试, 这是就需要配置launch.json了, 按F5或者"调试->启动调试", 然后选择"C++ (GDB/LLDB)"生成默认的launch.json, 修改内容如下:
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            # 指定调试的程序, 就是task生成的目标文件, 这里是helloworld.exe
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,   # 修改这里可以弹出调试窗口
            "MIMode": "gdb",
            # 指定你调试用的工具
            "miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

看官方说明还有这个参数"preLaunchTask": "g++.exe build active file", 但我的vscode生产的文件并没有这个参数, 这个参数的作用是说, 在执行launch之前需要执行的任务, 比如前面我们配置的task是编译用的, 这里配置的launch是调试用的, 但通常我们调试时希望程序自动编译新修改的代码然后再开始调试, 这是就要用到"preLaunchTask"这个配置了, 把它配置成你前面task的名字, 那么在你每次调试前, 它都行先执行前面的task然后再开始调试.

注意事项

  1. 看官方说明, 安装mingw64的时候, 注意不要让路径中包含空格.
  2. 注意编译和调试的时候, 你的默认终端应该是powershell等windows终端, 像我开始用的wsl就会报错. 因为我们是在windows下工作的.
  3. 编译或者调试要回到helloworld.c再进行.

>>>>>>>>>>>>>>>>>>
补充:
这里补充一点关于code runner的说明. code runner是一款代码调试插件, 和上面的功能差不多, 它其实也是有一些配置的, 要告诉他如何去编译, 编译时带哪些参数.
这个是在code-runner.executorMap这一项配置的, 可以在设置中搜索, 然后在setting.json中修改, 在插件的说明文档中有举例, 比如c语言的编译方法为"c": "cd dir && gccfileName -o fileNameWithoutExt &&dir$fileNameWithoutExt", 这其实和上面的编译很相似.
再就是对于中文, 默认的编译方式可能会显示乱码, 可以通过在gcc或g++后面添加-fexec-charset=GBK 参数来解决. 上面的方法也是.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348