【 使用环境 】wsl ,win11, 开发环境
【问题现象及影响】文档里说启动之后会自动运行tasks的cmake,但是我这个界面好像什么都没运行啊
你看的哪个文档
可以看下你的tasks配置。我看写博客的同学配置了编译和调试内容,可以看下自己的配置是否有问题,可以贴出来看一下。
我自己找了个远程主机测试了一下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参数。
/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方法,我找不到当时设置的文档了
你这里关键报错信息是这个。
看起来与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文件
这里有一个preLauchTask 配置的是 “CMake Build” ,这个配置就是tasks.json中的任务名字。你上面用的我给的文件,文件中配置的名字叫"Build",把两边搞成一样的就行了。