在centos中安装最新C++环境
yum -y install centos-release-scl
yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
scl enable devtoolset-11 bash
source /opt/rh/devtoolset-11/enable
查看g++版本:
g++ -v

可以看到这时安装了最新的gcc 11.2.1,它支持到了最新的C++23标准

需要注意这时g++的位置为:

同时需要每次source /opt/rh/devtoolset-11/enableg++才会生效,所以我采取的方案是将这个语句加入到~/.bashrc文件中。(~/.bashrc是一个每次开启一个控制台都会自动执行的脚本文件)
为Vscode配置C++环境
首先需要选定一个文件夹,然后在该文件夹下面生成如下的.vscode文件夹,并生成如下2个文件,在下面将详细对其说明。需要注意有挺多文章会建议再生成setting.json和launch.json这两个文件对于运行来说不是必须的,配置好下面两个文件就可以正常运行C++还有debug了。

c_cpp_properties.json
c_cpp_properties.json 是 Visual Studio Code 的 C/C++ 配置文件,用于定义项目的编译选项和连接器选项。
使用快捷键ctrl+shift+P打开Command Palette,输入C/C++: Edit configurations(JSON)

就可以生成这个文件。
官方对其的介绍链接:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference
重点关注configurations项:
name: 我们的配置文件可能有多个,所以每个配置文件都有一个友好的标识,也就是“name”字段,可以帮我们在其他地方选择到底我们需要的是那个配置文件
intelliSenseMode: 告诉VSCode当前配置想要模拟的目标架构和编译器,以便VSCode的C++的插件可以提供正确的IntelliSense,并反映pointer、size_t、long等数据类型的正确大小。通常,不同平台采用不同的值:
- windows平台通常采用: msvc-x64
- Linux平台通常采用: gcc-x64
- Mac平台通常采用: clang-x64
compilerPath: 编译器路径, 在上面的例子中,我们使用了mac里面的clang编译器。 如果你自己的编译器在别的路径下,可以将这个配置改为对应的路径。当VSCode 知道在哪儿可以找到这些文件时候,它可以提供智能补全和跳转定义、导航等功能。
compilerArgs: 【可选】编译器参数, 如果我们编译的时候需要增加参数,可以通过这个字段来进行设置
includePath: 制定需要搜索的头文件路径,注意, 在这些路径上搜索不是递归的。如果想要递归,可以在目录后加上“**”符号,以明确告知VSCode进行递归搜索。
- 举例: w o r k s p a c e F o l d e r / ∗ ∗ 将搜索 {workspaceFolder}/**将搜索 workspaceFolder/∗∗将搜索{workspaceFolder}以及所有子目录。
- 举例: w o r k s p a c e F o l d e r / 将搜索 {workspaceFolder}/将搜索 workspaceFolder/将搜索{workspaceFolder}目录,不会搜索子目录
forcedInclude: 【可选】在处理源文件中的任何其他字符之前应包含的文件列表。文件按列出的顺序包含。
cStandard: 使用的C标准
cppStandard: 使用的C++标准
可能需要的修改:
- includePath需要进行补充。输入如下的命令获得includePath
g++ -v -E -x c++ -

将最后的这些路径放入到该项中:

- 修改
cppStandard,因为我希望使用到C++11特性,所以需要将其修改为C++11。不然使用智能指针时虽然能编译,但是vscode会对其进行报错。

这是我最后的c_cpp_properties.json文件
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/rh/devtoolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11",
"/opt/rh/devtoolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/x86_64-redhat-linux",
"/opt/rh/devtoolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/../../../../include/c++/11/backward",
"/opt/rh/devtoolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/include",
"/usr/local/include",
"/opt/rh/devtoolset-11/root/usr/include",
"/usr/include"
],
"defines": [],
"compilerPath": "/opt/rh/devtoolset-11/root/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
tasks.json
task.json文件是VSCode启动程序的配置文件,它定义了在点击了vscode的运行按钮之后执行的操作,有几个重要参数:
label:指定前置任务(比如:“C/C++: gcc 生成活动文件”)名称command:任务执行命令,一般来说执行编译命令:gccargs:用于command后面的参数,比如:-g(debug选项),-f等
这是我最后的task.json文件,注意这里的command换成了我上面安装的最新的g++。
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "/opt/rh/devtoolset-11/root/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
},
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/opt/rh/devtoolset-11/root/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/bin/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
]
}
结果展示
运行如下的智能指针代码:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
// 构建 2 个智能指针
std::shared_ptr<int> p1(new int(10));
std::shared_ptr<int> p2(p1);
// 输出 p2 指向的数据
cout << *p2 << endl;
p1.reset(); // 引用计数减 1,p1为空指针
if (p1)
{
cout << "p1 不为空" << endl;
}
else
{
cout << "p1 为空" << endl;
}
// 以上操作,并不会影响 p2
cout << *p2 << endl;
// 判断当前和 p2 同指向的智能指针有多少个
cout << p2.use_count() << endl;
return 0;
}
点击运行

编译提示,注意这里的命令就是tasks.json中的命令

运行结果:

点击调试

调试页面:

然后就可以点击上面的逐步运行进行调试了。
至此就完成了在vscode上远程调试运行最新版本的C++代码了,可以愉快地在linux上写C++代码了。

参考链接:
本文介绍了如何在CentOS系统中通过Yum安装最新版的C++编译器GCC,并利用SCL启用。然后详细讲解了如何配置VisualStudioCode的C++环境,包括c_cpp_properties.json和tasks.json文件的设置,以支持C++11标准,实现代码的编译和调试功能。

5995

被折叠的 条评论
为什么被折叠?



