• VS Code配置C/C++环境


    配置文件

    • launch.json
    • tasks.json
    • settings.json

    launch.json

    {
        "version": "0.2.0",
        "configurations": [{
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
            "environment": [], // 环境变量
            "externalConsole": true, // 为true时使用单独的cmd窗口,与其它IDE一致;18年10月后设为false可调用VSC内置终端
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
            "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
            "miDebuggerPath": "E:\mingw64\bin\gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
            "setupCommands": [
                { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
        }]
    }
    

    tasks.json

    {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "shell",
                "label": "Compile",
                "command": "E:\mingw64\bin\g++.exe",
                "args": [
                    "-g",
                    "${file}",
                    "-o",
                    "${fileDirname}\${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "E:\mingw64\bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build"
            },
            {
                "type": "shell",
                "label": "C/C++: cpp.exe build active file",
                "command": "E:\mingw64\bin\cpp.exe",
                "args": [
                    "-g",
                    "${file}",
                    "-o",
                    "${fileDirname}\${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "E:\mingw64\bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build"
            },
            {
                "type": "shell",
                "label": "C/C++: g++.exe build active file",
                "command": "E:\mingw64\bin\g++.exe",
                "args": [
                    "-g",
                    "${file}",
                    "-o",
                    "${fileDirname}\${fileBasenameNoExtension}.exe"
                ],
                "options": {
                    "cwd": "E:\mingw64\bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": "build"
            }
        ]
    }
    

    settings.json

    {
        "files.defaultLanguage": "c", // ctrl+N新建文件后默认的语言
        "editor.formatOnType": true,  // 输入分号(C/C++的语句结束标识)后自动格式化当前这一行的代码
        "editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了
        "editor.acceptSuggestionOnEnter": "off", // 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense
        // "editor.snippetSuggestions": "top", // (可选)snippets显示在补全列表顶端,默认是inline
    
        "code-runner.runInTerminal": true, // 设置成false会在“输出”中输出,无法输入
        "code-runner.executorMap": {
            "c": "cd $dir && gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && &'$dir$fileNameWithoutExt'",
            "cpp": "cd $dir && g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && &'$dir$fileNameWithoutExt'"
            // "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt.exe -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt",
            // "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt.exe -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && $dir$fileNameWithoutExt"
        }, // 右键run code时运行的命令;未注释的仅适用于PowerShell(Win10默认),文件名中有空格也可以编译运行;注释掉的适用于cmd(win7默认),PS和bash也能用,但文件名中有空格时无法运行
        "code-runner.saveFileBeforeRun": true, // run code前保存
        "code-runner.preserveFocus": true,     // 若为false,run code后光标会聚焦到终端上。如果需要频繁输入数据可设为false
        "code-runner.clearPreviousOutput": false, // 每次run code前清空属于code runner的终端消息,默认false
        "code-runner.ignoreSelection": true,   // 默认为false,效果是鼠标选中一块代码后可以单独执行,但C是编译型语言,不适合这样用
    
        "C_Cpp.clang_format_sortIncludes": true, // 格式化时调整include的顺序(按字母排序)
    }
    

    Code Runner编译运行

    有两种方法:编辑区右上角小三角快捷键,在 Windows 和 Linux 下一般默认是 Ctrl + Alt + N 小三角程序会在输出面板输出有个缺点是不能输入……所以要到设置页做一点轻微的改动:可以按图中勾上选项或去掉默认的勾最重要就是倒数第二个 Run In Terminal,勾上后插件会调用 VS Code 的内置终端并在其中运行程序,可以满足输入要求。如果编译时要带参数,比如 -std=c++11 -Wall ,要编辑 Code Runner 的 "code-runner.executorMap",在用户设置改动以覆盖,比如改成:"code-runner.executorMap": {
    "c": "cd $dirWithoutTrailingSlash && gcc $fileName -o (fileNameWithoutExt.exe -std=c11 -Wall -lm && ./)fileNameWithoutExt.exe"
    }关于 $ 开头的参数是 Code Runner 插件的 定义,详见 Code Runner - Visual Studio Marketplace​

    相关文章

    1. https://www.zhihu.com/question/30315894
    2. https://www.cnblogs.com/bpf-1024/p/11597000.html
  • 相关阅读:
    linux主机安装配置chrony时间同步器
    LINUX正则表达式
    文件系统
    “好文章”链接-爬虫脚本
    优秀博客集
    负载均衡LVS(Linux Virtual Server)
    LNMP
    MySQL备份还原
    iptables--SNAT、DNAT实践
    MySQL 基础命令
  • 原文地址:https://www.cnblogs.com/melodyjerry/p/12851936.html
Copyright © 2020-2023  润新知