vscode打开后没自动运行编译miniob

【 使用环境 】wsl ,win11, 开发环境
【问题现象及影响】文档里说启动之后会自动运行tasks的cmake,但是我这个界面好像什么都没运行啊

你看的哪个文档

以下是图片和网址连接

说的位置如图所示,文档你输出了那么多行,我的什么也没有

可以看下你的tasks配置。我看写博客的同学配置了编译和调试内容,可以看下自己的配置是否有问题,可以贴出来看一下。

以下是task配置

我自己找了个远程主机测试了一下vscode编译功能。我不知道如何让他自动运行,但是知道如何手动运行编译命令。
可以看下面第一个图,从菜单的“终端”-“运行构建任务”,就可以执行编译命令。如果你的项目还没有配置相关的任务,他就会提示创建。


下面的图片是我的环境上运行时可以看到的任务输出。如果运行构建任务时,没有自动打开这个窗口,可以通过菜单“查看/View" - “终端/Terminal” 来查看。但是比较麻烦的是,需要手动切换查看cmake或make的输出结果。可以看我的截图。

需要注意的是,你的配置有个错误,cmake是没有-j参数的,它是make的参数。
我这里附上我测试的tasks.json文件,这个文件内容有些是自动生成的。
再说明一点,我这里与你给出的博客示例不同,我没有使用options指定编译路径,而是使用cmake -B参数和make -C参数来指定的编译路径。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "-DDEBUG=ON",
                "-B",
                "${workspaceFolder}/build"
            ]
        },
        {
            "label": "make",
            "command": "make",
            "args": [
                "-j4",
                "-C",
                "${workspaceFolder}/build"
            ]
        },
        {
            "label": "Build",
            "dependsOn": [
                "cmake",
                "make"
            ],
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

不好意思,看了下手册,cmake从3.12开始支持了-j参数。

复制了你的task还是报和之前一样的错误

/your/new/gcc/path是在哪里设置过?

经过多次测试,tasks.json调整为:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "-DDEBUG=ON",
                "-B",
                "${workspaceFolder}/build",
            ]
        },
        {
            "label": "make",
            "command": "make",
            "args": [
                "-j4",
                "-C",
                "${workspaceFolder}/build"
            ]
        },
        {
            "label": "Build",
            "dependsOrder": "sequence",
            "dependsOn": [
                "cmake",
                "make"
            ],
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

在Build任务中,cmake和make任务改成顺序执行

同样的错误
正在执行任务: cmake -DDEBUG=ON -B /home/root1/miniob/build

cmake: /your/new/gcc/path/lib64/libstdc++.so.6: version `GLIBCXX_3.4.30’ not found (required by cmake)

  • 终端进程“/bin/bash ‘-c’, ‘cmake -DDEBUG=ON -B /home/root1/miniob/build’”启动失败(退出代码: 1)。
  • 终端将被任务重用,按任意键关闭。

网上百度的安装gcc方法,我找不到当时设置的文档了

我的GCC信息

你这里关键报错信息是这个。
看起来与cmake的版本不兼容。
已经看到了你的gcc版本,你的cmake版本是多少?
另外看下你的环境变量:LD_LIBRARY_PATH

Cmake版本


环境变量是根据以下这个图片改的

图片的链接是这个 miniob/how_to_build.md at main · noodlesAI/miniob (github.com)
以下是环境变量


通过这个执行信息,看出来是由于安装的gcc路径和环境变量配置,是在root用户上的,而vscode或cmake执行的时候,是在一个普通用户上的,他们使用的环境信息不一致导致的。

一个最简单的修复建议,直接使用ubuntu 22上默认安装的gcc,把自己安装的gcc链接库信息从LD_LIBRARY_PATH中去掉。
去掉LD_LIBRARY_PATH的方法:
修改 ~/.bashrc 或 ~/.bash_profile文件,删除或注释掉 export LD_LIBRARY_PATH=XXXX
然后关闭当前终端,再重新打开。

另外看下默认安装的gcc版本是多少?我记得unbuntu 22装的挺高的版本

去掉LD_LIBRARY_PATH之后重启终端执行gcc -v呈现如下信息,这就是我之前安装的gcc版本,不是默认的
下面所有操作都是去掉LD_LIBRARY_PATH之后的


然后执行菜单run build task报如下信息,应该已经成功了,

但是我在main.cpp中打断点,然后点击gdb启动按钮报如下错误,程序无法调试

这是我的GCC信息

本地测试一下没有问题,看看你的launch.json文件


你看一下 这是launch.json

这里有一个preLauchTask 配置的是 “CMake Build” ,这个配置就是tasks.json中的任务名字。你上面用的我给的文件,文件中配置的名字叫"Build",把两边搞成一样的就行了。