在centos中安装最新C++环境并在vscode中搭建C++调试运行环境

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

在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
查看g++版本
可以看到这时安装了最新的gcc 11.2.1,它支持到了最新的C++23标准
gcc版本与C++的对照关系
需要注意这时g++的位置为:
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:任务执行命令,一般来说执行编译命令:gcc
  • args:用于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++代码了。

参考链接:

  1. Centos 升级GCC版本
  2. C++各版本标准与gcc、vs编译器对应关系
  3. VSCode 的C++编译
  4. vscode检测到#include错误,请更新includePath之解决方法
  5. VSCode的launch.json和task.json解读
  6. C++11 shared_ptr智能指针(超级详细)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值