Linux/Manjaro如何配置Vscode的C/C++编译环境

 更新时间:2023年05月17日 11:10:47   作者:Morgana  
这篇文章主要介绍了Linux/Manjaro配置Vscode的C/C++编译环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Linux/Manjaro配置Vscode的C/C++编译环境

安装gcc/g++

Arch/Manjaro安装gcc和g++非常简单

安装gcc和gcc-libs

sudo pacman -S gcc
sudo pacman -S gcc-libs
sudo pacman -S gdb

安装vscode

安装vscode,使用yay搜索软件包

yay -S visual-studio-code-bin

直接安装最新版本即可

如果还没有安装yay,需要通过git克隆yay的代码仓库

# 安装base-devel
sudo pacman -S base-devel
# 安装git
sudo pacman -S git
# cd到/opt
cd /opt
# 通过git克隆yay的代码仓库
sudo git clone https://aur.archlinux.org/yay.git
#设置权限,将lin改为你的用户名
sudo chown -R lin:users ./yay
# 进入yay文件夹并安装yay
cd yay
makepkg -si

然后再执行安装vscode的命令

yay -S visual-studio-code-bin

配置vscode的C/C++环境

安装插件

点击拓展,安装几个基本的插件:

  • C/C++、C/C++ Extension pack、C/C++ Themes
  • Code Runner:
  • snippet:代码段模板
  • Chinese:中文插件,安装好后重启vscode

先写一个hellow程序

在资源管理器中打开工作空间,我这里是/home/lin/Code/Cgit。 新建一个hellow文件夹,在文件夹中新建三个文件hellow.cpp map.cpp map.h用来方便测试后面的json文件是否配置完成。

编写下面的文件

//hellow.cpp
#include "map.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int i = 1;
int main()
{
	cout << "Hellow World"
	<< " " << AandB(i);
	cout << endl;
}
//map.cpp
#include <iostream>
using namespace std;
int AandB(int a)
{
	a++;
	return a;
}
//map.h
#ifndef MAP_H
#define MAP_H
extern int i;
int AandB(int a);
#endif

编写好后保存文件,下面就可以开始编写json文件,来引导vscode编译程序了。

编写json文件

json文件现在非常好读,通过chatgpt即可根据需求编写对应的json文件,这里将介绍一些比较基本的设置项和如何设置json文件以引导编译C/C++文件。

编写完的json文件可以在这个网站查询是否有效

Fetching Title#u3bx

编写vscode设置项json文件

首先点击文件-首选项-设置,右上角有一个打开设置的图标

这里会打开vscode设置项的settings.json文件,这个文件包含了一些vscode的基本设置。

{
"C_Cpp.files.exclude": {
"**/.vscode": true,
"**/.vs": true
},
"C_Cpp.default.customConfigurationVariables": {},
"code-runner.runInTerminal": true,
"code-runner.saveFileBeforeRun": true,
"C_Cpp.default.compilerPath": "/usr/bin/clang",
"files.autoGuessEncoding": true,
"security.workspace.trust.untrustedFiles": "open"
}

上面是我的settings.json文件,大家可以直接用,其中code-runner需要安装code runner插件。

  • "C_Cpp.files.exclude": {...}:这个设置项是 C/C++ 扩展的配置,用于指定要排除在项目外的文件。在这个例子中,**/.vscode 和 **/.vs 目录下的文件将被排除在项目外。
  • "C_Cpp.default.customConfigurationVariables": {}:这个设置项是 C/C++ 扩展的配置,用于指定自定义的编译选项。在这个例子中,没有指定任何自定义编译选项。
  • "code-runner.runInTerminal": true:这个设置项是 Code Runner 扩展的配置,用于指定代码是否在终端中运行。在这个例子中,设置为 true,即代码将在终端中运行。
  • "code-runner.saveFileBeforeRun": true:这个设置项是 Code Runner 的配置,用于指定代码是否在运行前保存。在这个例子中,设置为 true,即代码将在运行前自动保存。
  • "C_Cpp.default.compilerPath": "/usr/bin/clang":这个设置项是 C/C++ 扩展的配置,用于指定默认的编译器路径。在这个例子中,指定为 /usr/bin/clang,即使用 clang 编译器。
  • "files.autoGuessEncoding": true:这个设置项用于指定是否自动猜测文件编码。在这个例子中,设置为 true,即 Visual Studio Code 将尝试自动猜测文件编码。
  • "security.workspace.trust.untrustedFiles": "open":这个设置项用于指定未受信任的文件的打开方式。在这个例子中,设置为 open,即未受信任的文件将以只读模式打开。

编写编译json文件

上面在工作空间中我打开的是/home/lin/Code/Cgit,并在这个文件夹下创建了一个hellow文件。在工作空间目录下创建一个新的文件夹.vscode,用来存放我们的json文件。 在新创建的.vscode文件中新建四个文件: c_cpp_properties.json :用来设置编译器的路径和头文件路径等信息。 launch.json:调试配置文件,用于在编写 C/C++ 代码时配置调试器 settings.json:设置项配置文件,用来设置一些编译C/C++程序时的一些设置选项 tasks.json:任务配置文件,用于定义一些自定义任务,以便在编辑器中执行它们。

创建后的工作空间是这样的

settings.json

{
"files.defaultLanguage": "cpp",
"editor.formatOnType": true,
"editor.formatOnSave": true,
"editor.snippetSuggestions": "top",
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt.out",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt.out"
},
"code-runner.saveFileBeforeRun": true,
"code-runner.clearPreviousOutput": false,
"C_Cpp.clang_format_sortIncludes": true,
"C_Cpp.intelliSenseEngine": "default",
"cmake.configureOnOpen": false,
"files.associations": {
"iosfwd": "cpp"
}
}

settings.json文件没有什么好改的,如果想自己设置可以问chatgpt

c_cpp_properties.json

{
"configurations": [
{
	"name": "Linux",
	"includePath": [
		"${workspaceFolder}/${workspaceFolderBasename}",
		"/usr/include",
		"/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/include/"
	],
	"cStandard": "c11",
	"cppStandard": "c++17",
	"intelliSenseMode": "gcc-x64",
	"defines": [
		"_DEBUG",
		"UNICODE",
		"__GNUC__=7",
		"__cdecl=__attribute__((__cdecl__))"
	],
	"browse": {
	"path": [
		"${workspaceFolder}",
		"/usr/include",
		"/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/include/",
		"/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/include-fixed/",
		"/lib64/gcc/x86_64-pc-linux-gnu/12.2.1/install-tools/include/"
	],
	"limitSymbolsToIncludedHeaders": true,
	"databaseFilename": ""
	}
	}
	],
	"version": 4
}

c_cpp_properties.json主要需要修改的是includePath,这个选项包含了头文件的地址,需要自己设置一下自己编写的头文件的目录,我比较习惯直接将头文件放在工程目录,就添加"${workspaceFolder}/${workspaceFolderBasename}" ${workspaceFolder}是工作空间名称变量代表 ${workspaceFolderBasename}是运行程序所在目录,如果我运行/home/lin/Code/Cgit/hellow/hellow.cpp,这个变量就是hellow 我添加的头文件目录就是/home/lin/Code/Cgit/hellow/,我们只需要在项目文件夹中编写头文件即可

如果习惯在项目文件夹中单独建一个问价夹存放头文件可以在includePath添加"${workspaceFolder}/${workspaceFolderBasename}/include"把头文件放在include文件夹中即可

tasks.json

{
"version": "2.0.0",
"tasks": [
{
"label": "创建并调试C文件",
"type": "shell",
"command": "gcc",
"args": [
"-I",
"${workspaceFolder}/${relativeFileDirname}",
"-g",
"${workspaceFolder}/${relativeFileDirname}/*.cpp",
"-o",
"${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out"
],
"group": "build"
},
{
"label": "创建并调试C++文件",
"type": "shell",
"command": "g++",
"args": [
"-I",
"${workspaceFolder}/${relativeFileDirname}",
"-g",
"${workspaceFolder}/${relativeFileDirname}/*.cpp",
"-o",
"${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out"
],
"group": "build"
},
{
"label": "创建并运行C文件",
"type": "shell",
"command": "gcc",
"args": [
"-I",
"${workspaceFolder}/${relativeFileDirname}",
"${workspaceFolder}/${relativeFileDirname}/*.cpp",
"-o",
"${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out"
],
"group": "build"
},
{
"label": "创建并运行C++文件",
"type": "shell",
"command": "g++",
"args": [
"-I",
"${workspaceFolder}/${relativeFileDirname}",
"${workspaceFolder}/${relativeFileDirname}/*.cpp",
"-o",
"${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out"
],
"group": "build"
}
]
}

tasks.json文件会生成.exe.out文件,linux我们就选择.out文件,这里需要修改的是"args"这里对应的是gcc或g++编译指令。 我们这里设置的是

"args": [
"-I",
"${workspaceFolder}/${relativeFileDirname}",
"${workspaceFolder}/${relativeFileDirname}/*.cpp",
"-o",
"${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out"
]

在编译hellow.cpp的时候就会执行g++ -I /home/lin/Code/Cgit/hellow /home/lin/Code/Cgit/hellow/*.cpp -o /home/lin/Code/Cgit/hellow/hellow.out

下面是每个参数的解释:

  • g++:这个参数指定了使用的编译器,这个例子中为 g++ 编译器。
  • -I /home/lin/Code/Cgit/hellow:这个参数指定了头文件的搜索路径,/home/lin/Code/Cgit/hellow 是头文件所在的目录。
  • /home/lin/Code/Cgit/hellow/*.cpp:这个参数指定了要编译的源文件,/home/lin/Code/Cgit/hellow 是源文件所在的目录,*.cpp 表示编译该目录下所有的 C++ 源文件。
  • -o /home/lin/Code/Cgit/hellow/hellow.out:这个参数指定了生成的可执行文件的输出路径,/home/lin/Code/Cgit/hellow/hellow.out 是生成的可执行文件的完整路径。

每次编译完成都会在项目目录中生成.out文件,当然也可以自己设置.out文件的保存路径,但同样需要修改launch.json文件,

launch.json

{
"version": "0.2.0",
"configurations": [
{
"name": "Run C",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/${relativeFileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "创建并运行C文件"
},
{
"name": "Run C++",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/${relativeFileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "创建并运行C++文件"
},
{
"name": "Debug C",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/${relativeFileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "创建并调试C文件"
},
{
"name": "Debug C++",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${relativeFileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/${relativeFileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "创建并调试C++文件"
}
]
}

launch.json文件设置了编译 C/C++ 代码时配置调试器,有几点需要特别注意

  • "preLaunchTask"名称一定要与tasks.json文件中的lable一致,这将影响调试时是否能找到对应的调试器
  • "cwd"用于指定调试器的当前工作目录,要设置成你的项目目录,不然读取C++读取文件的时候相对路径会出现问题
  • "program"要与tasks.json文件中的args中的“-o”的地址一致,不然读取不到.out文件,我这里都设置的是`"workspaceFolder/{workspaceFolder}/workspaceFolder/{relativeFileDirname}/${fileBasenameNoExtension}.out"``

以上设置完成json文件,我们就可以运行C++程序了

运行hellow.cpp

  • 资源管理器中点击hellow.cpp进入文件,点击左侧栏中带有小虫子图标的“运行和调试”
  • 选择”debug C++“,这里的名称是在launch.json中的"name"设置的找到对应的就行。
  • 点击绿色三角运行。

  • 终端输出Hellow World 2表示配置成功

到此这篇关于Linux/Manjaro配置Vscode的C/C++编译环境的文章就介绍到这了,更多相关Vscode的C/C++编译环境内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++开源库nlohmann/json的介绍和使用详解

    C++开源库nlohmann/json的介绍和使用详解

    nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观,这篇文章主要为大家详细介绍了nlohmann/json的简介和使用,需要的可以参考下
    2023-12-12
  • c语言for、while和do-while循环之间的区别

    c语言for、while和do-while循环之间的区别

    大家好,本篇文章主要讲的是c语言for、while和do-while循环之间的区别,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • VSCode搭建STM32开发环境的实现步骤

    VSCode搭建STM32开发环境的实现步骤

    因为VSCode免费且好用,可以安装各种插件,本文主要介绍了VSCode搭建STM32开发环境的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • C语言实现简单通讯录管理系统

    C语言实现简单通讯录管理系统

    这篇文章主要为大家详细介绍了C语言实现简单通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C/C++函数的调用约定的使用

    C/C++函数的调用约定的使用

    本文主要介绍了C/C++函数的调用约定的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C/C++语言中的头文件汇总

    C/C++语言中的头文件汇总

    这篇文章主要汇总了C/C++语言中的头文件,方便各位朋友更好的工作和学习,有需要的朋友可以参考下
    2020-06-06
  • C语言中数组排序浅析

    C语言中数组排序浅析

    这篇文章主要为大家介绍了C语言算法练习中数组元素排序的四种类型,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-12-12
  • C/C++: Inline function, calloc 对比 malloc

    C/C++: Inline function, calloc 对比 malloc

    以下是对c/c++中的malloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下
    2016-07-07
  • C++标准模板库函数sort的那些事儿

    C++标准模板库函数sort的那些事儿

    sort函数是标准模板库的函数,已知开始和结束的地址即可进行排序,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快
    2013-09-09
  • C++ 关于STL中sort()对struct排序的方法

    C++ 关于STL中sort()对struct排序的方法

    本篇文章介绍了,关于STL中sort()对struct排序的方法。需要的朋友参考下
    2013-04-04

最新评论