vscode+CMake配置解析

啊。。。。踩了好多的坑

先亮干货

一、文件树

在这里插入图片描述
其中:

  1. 文件夹名字随便取(尽量英文吧)
  2. .vscode文件夹为vscode的配置文件,launch.json配置调试(按F5)的动作,task.json配置一系列默认动作(比如cmake,make)。
  3. build文件夹存放编译数据(也就是与源码无关的衍生物)
  4. CMakeLists.txt:配置CMake的文档
  5. main.cpp 这文件名也随便取,后面CMake里配置好就行。

二、文件内容

task.json

很长,后面有解释。。

{
    "tasks": [
        {
            "type": "shell",
            "label": "CreateBuildDir",
            "command": "mkdir",
            "args": [
                "-p",
                "build"
            ],
            "windows": {
                "options": {
                    "shell": {
                        "executable": "powershell.exe"
                    }
                },
                "args": [
                    "-Force",
                    "build"
                ]
            },
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "presentation": {
                "echo": false,
                "reveal": "silent",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false,
                "clear": false
            }
        },
        {
            "type": "shell",
            "label": "cmakeRun",
            "command": "cmake",
            "args": [".."],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "dependsOn": [
                "CreateBuildDir"
            ],
            "presentation": {
                "echo": false,
                "reveal": "silent",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false,
                "clear": false
            }
        },
        {
            "type": "shell",
            "label": "makeRun",
            "command": "make",
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "dependsOn": [
                "cmakeRun"
            ],
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": false,
                "reveal": "silent",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false,
                "clear": false
            }
        }
    ],
    "version": "2.0.0"
}

有点长,慢慢解释:
首先,如果没有vscode,我们的编译过程是这样的:

  1. 创建build文件夹
  2. 在build文件夹里cmake …
  3. 在build文件夹里 make
  4. 直接执行或gdb(debug)make生成的.exe文件。
    这里就是将每一步取一个名字放到vscode里一键执行
    比如"CreateBuildDir"这个task其实就执行了mkdir build这个命令
 {
            "type": "shell",
            "label": "CreateBuildDir",
            "command": "mkdir",
            "args": [
                "-p",
                "build"
            ],
            "windows": {
                "options": {
                    "shell": {
                        "executable": "powershell.exe"
                    }
                },
                "args": [
                    "-Force",
                    "build"
                ]
            },
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "presentation": {
                "echo": false,
                "reveal": "silent",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": false,
                "clear": false
            }
        }

后面不过多赘述,都类似一个意思,其中像"presentation"这种关键字不懂啥意思在vscode里鼠标悬停在上面就会自动告诉你什么意思。
在这里插入图片描述

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 重新make",
            "type": "cppdbg", // type 告诉vscode编译器的类型,我用的MinGW64也就是g++,这里是cppdgb, 这个是规定的,不是随便写,比如msvc编译器就是cppvsdbg
            "request": "launch",
            "program": "${workspaceFolder}\\build\\${workspaceRootFolderName}.exe",// program 这个是你的可执行程序位置,这里${workspaceRootFolderName}表示文件夹名字,整个翻译过来就是“build\vscode_cmake.exe"
            "args": [], 
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}\\build",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\Program Files (x86)\\Dev-Cpp\\mingw_liu\\mingw64\\bin\\gdb.exe",// 调试器的路径(不同人不一样的)
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "makeRun"// preLaunchTask 表示在 执行调试前 要完成的任务,比如这里 要完成 makeRun 这个tasks任务(重新生成程序),这里的 makeRun 是 tasks.json 中 lable 标记的任务名称
        }
    ]
}
// 上面没有注释的部分基本都是默认生成的,可以不用更改的部分

CMakeLists.txt

这里意思就编译一个main.cpp生成名为vscode_cmake.exe的可执行文件

cmake_minimum_required(VERSION 3.0.0)
project(vscode_cmake VERSION 0.1.0)

add_executable(vscode_cmake main.cpp)//编译main.cpp生成名为vscode_cmake.exe的可执行文件

main.cpp

#include "iostream"
#include "vector"
using namespace std;

int main() {
    vector<int> v;
    v = {1, 2, 3, 4, 5, 6};
    // v = {1,2,3};
    for (auto i : v) {
        cout << i << endl;
    }
    return 0;
}

三、问题:

1. debug时vector啥的不显示值

重点应在launch.json中的

"setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],

然而很多人把这个配置抄来也没啥用,看了很多帖子,是mingw的问题,找了一个没问题的mingw拷了过来,把其中的bin文件夹添加到环境变量中(添加完重启生效!添加完重启生效!添加完重启生效!——不重启踩坑3天的某傻子)。
这里拷来的mingw给个云盘链接造福个大众

链接:https://pan.baidu.com/s/1NQha950cxu6yppFPg3G_8w 
提取码:bt4j 

2. cmake配置混乱,不知道点哪个调试程序

前面的配置走好了就直接按F5,选择咱的配置就整就完了,下面那排按钮没整明白就先不管了。
看个效果在这里插入图片描述

参考

vscode一键配置C/C++多个C及CPP文件编译与tasks.json和launch.json原理

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值