在VSCode中同时配置C和C++环境

news/2025/2/25 21:02:43/文章来源:https://www.cnblogs.com/fyxa/p/18737242

1. 安装必要的工具和扩展

安装编译器

  • Windows系统:可以安装MinGW - w64,它是一个支持Windows平台的GCC编译器集合。访问 MinGW - w64官网 下载安装包,按照安装向导进行安装,安装过程中注意选择合适的架构(如x86_64)和线程模型(如posix)。安装完成后,将其 bin 目录(如 C:\mingw64\bin)添加到系统环境变量 PATH 中。
  • Linux系统:大多数Linux发行版默认已经安装了GCC和G++编译器。如果没有安装,可以使用包管理器进行安装。例如,在Ubuntu系统中,打开终端并执行以下命令:
sudo apt update
sudo apt install build-essential
  • macOS系统:可以安装Xcode Command Line Tools,打开终端并执行以下命令:
xcode-select --install

安装VSCode扩展

打开VSCode,在扩展市场中搜索并安装以下扩展:

  • C/C++:由Microsoft提供,为C和C++开发提供语法高亮、智能提示、调试等功能。

2. 配置VSCode工作区

创建工作区文件夹

在本地磁盘上创建一个用于存放C和C++代码的文件夹,例如 C_CPP_Workspace,然后在VSCode中通过 文件 -> 打开文件夹 打开该文件夹。

配置 tasks.json 文件

tasks.json 文件用于定义编译任务。在VSCode中,按下 Ctrl + Shift + P(Windows/Linux)或 Cmd + Shift + P(macOS)打开命令面板,输入 Tasks: Configure Task,选择 Create tasks.json file from template,然后选择 Others。将生成的 tasks.json 文件内容替换为以下代码:

{"version": "2.0.0","tasks": [{"label": "Build C","type": "shell","command": "gcc","args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"group": {"kind": "build","isDefault": true},"problemMatcher": ["$gcc"]},{"label": "Build C++","type": "shell","command": "g++","args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"group": {"kind": "build","isDefault": false},"problemMatcher": ["$gcc"]}]
}

这段代码定义了两个编译任务:Build C 用于编译C文件,Build C++ 用于编译C++文件。

配置 launch.json 文件

launch.json 文件用于配置调试任务。按下 Ctrl + Shift + D(Windows/Linux)或 Cmd + Shift + D(macOS)打开调试面板,点击齿轮图标选择 C++ (GDB/LLDB),将生成的 launch.json 文件内容替换为以下代码:

{"version": "0.2.0","configurations": [{"name": "Launch C","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","preLaunchTask": "Build C","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]},{"name": "Launch C++","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","preLaunchTask": "Build C++","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

这段代码定义了两个调试配置:Launch C 用于调试C文件,Launch C++ 用于调试C++文件。在调试之前,会先执行对应的编译任务。

3. 测试配置

创建测试文件

在工作区文件夹中创建一个C文件(例如 test.c)和一个C++文件(例如 test.cpp),并编写简单的代码:

  • test.c
#include <stdio.h>int main() {printf("Hello, C!\n");return 0;
}
  • test.cpp
#include <iostream>int main() {std::cout << "Hello, C++!" << std::endl;return 0;
}

编译和运行

  • 编译C文件:打开 test.c 文件,按下 Ctrl + Shift + B(Windows/Linux)或 Cmd + Shift + B(macOS),选择 Build C 任务进行编译。编译成功后,在终端中输入 ./test 运行程序。
  • 编译C++文件:打开 test.cpp 文件,按下 Ctrl + Shift + B(Windows/Linux)或 Cmd + Shift + B(macOS),选择 Build C++ 任务进行编译。编译成功后,在终端中输入 ./test 运行程序。

调试

  • 调试C文件:打开 test.c 文件,点击调试面板的绿色三角形按钮,选择 Launch C 配置进行调试。
  • 调试C++文件:打开 test.cpp 文件,点击调试面板的绿色三角形按钮,选择 Launch C++ 配置进行调试。

为什么有时候需要指定 compilerPath

通常情况下,如果编译器已经正确安装并且其所在路径已经添加到系统的环境变量中,VSCode 的 C/C++ 扩展能够自动找到编译器,此时不指定 compilerPath 也可以正常工作。

然而,当编译器没有添加到环境变量,或者系统中有多个版本的编译器,你想明确指定使用某一个时,就需要在配置文件中手动指定 compilerPath

具体配置方法

配置 c_cpp_properties.json

要配置 compilerPath,需要创建或编辑 c_cpp_properties.json 文件。你可以通过以下方式生成该文件:
在 VSCode 中,按下 Ctrl + Shift + P(Windows/Linux)或 Cmd + Shift + P(macOS)打开命令面板,输入 C/C++: Edit Configurations (UI) 并回车,之后点击界面右上角的“打开JSON文件”按钮,就会生成 c_cpp_properties.json 文件。

以下是一个包含 compilerPath 配置的示例:

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"windowsSdkVersion": "10.0.19041.0","compilerPath": "C:/mingw64/bin/gcc.exe",  // Windows 下 MinGW - w64 的 GCC 路径"cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}

对于不同的操作系统,compilerPath 的配置会有所不同:

  • Windows:如果你使用的是 MinGW - w64,路径可能类似于 "C:/mingw64/bin/gcc.exe"(C 编译器)和 "C:/mingw64/bin/g++.exe"(C++ 编译器)。
  • Linux:一般情况下,GCC 和 G++ 已经在系统的环境变量中,compilerPath 可以设置为 "/usr/bin/gcc"(C 编译器)和 "/usr/bin/g++"(C++ 编译器)。
  • macOS:通常可以设置为 "/usr/bin/clang"(C 编译器)和 "/usr/bin/clang++"(C++ 编译器)。

注意事项

  • 当指定了 compilerPath 后,VSCode 的 C/C++ 扩展会使用你指定的编译器进行智能感知和代码分析。
  • 如果你修改了 compilerPath,可能需要重新加载 VSCode 或者重新打开项目,以使配置生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889751.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring复习-事务

事务概述 Spring事务编程概述 事务是开发中必不可少的东西,使用JDBC开发时,我们使用connnection对事务进行控制,使用MvBatis时,我们使用SqlSession对事务进行控制,缺点显而易见,当我们切换数据库访问技术时,事务控制的方式总会变化,Spring 就将这些技术基础上,提供了统…

Prompt进阶

在Prompt入门里,我们分享了OpenAI官方给出的提示词建议,但这些建议基本上是指导性的,方向性的,概念性的,虽然对我们编写提示词有很大帮助,但究竟我们的提示词好还是不好,效率怎么性,很大程度上要看每个人的理解,和提示词输出。那么有没有一个可操作性的,方法论的,谁…

P1174 打砖块

链接 https://www.luogu.com.cn/problem/P1174 思路刚开始的思路:设置dp[i][j]:前i列使用了j颗子弹,那么递推dpi,j=max(dpi,j,dpi-1,k+maxj-k),然后统计在第i列使用了j-k颗子弹会多出来多少颗,把这些遍历加到前面,见代码。喜提70pts。但是搞不懂哪里错了。 看了评论区的dp:70…

redis - [06] redis-benchmark性能测试

题记部分 001 || 参数含义 002 || 测试100个并发,100000个请求 启动redis-server redis-server /etc/redis.conf 进行性能测试 redis-benchmark -h localhost -p 6379 -c 100 -n 100000

百万架构师第四十三课:Nginx:Nginx 应用实战|JavaGuide

百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 课程目标:Nginx 反向代理功能配置 Nginx 负载均衡实战 Nginx 动静分离配置 Nginx 配置文件分析 Nginx 多进程模型原理 Nginx 高可用集群实战反向代理​ 我们把请求发送到 proxy (代理服务…

大三下每日打卡003

今天配置了python的虚拟环境anaconda想尝试一下yolov8来实现识别

需求评审

需求评审是产品经理日常会议的形式之一,也是一个“公开处刑”的时刻。这篇文章,我们看看作者分享的如何做好一次需求评审的经验,供大家参考。前段时间有小伙伴留言,想聊一下关于需求评审面向不同角色如何处理,以及产品不同生命周期产品工作上有什么区别。我结合自己工作经…

牛客题解 | 对称的二叉树_1

牛客题库题解题目 题目链接 题目的主要信息:判断一棵二叉树是否是镜像,即判断二叉树是否是轴对称图形轴对称:非轴对称:举一反三: 学习完本题的思路你可以解决如下题目: BM28. 二叉树的最大深度 BM29. 二叉树中和为某一值的路径(一) BM32. 合并二叉树 BM33. 二叉树的镜像…

牛客题解 | 字符串变形

牛客题库题解题目 题目链接 题目主要信息:将字符串大小写反转 将整个字符串的所有单词位置反转举一反三: 学会了本题的思路,你将可以解决类似的字符串问题: BM84. 最长公共前缀 BM85. 验证IP地址 方法一:双逆转(推荐使用) 思路: 将单词位置的反转,那肯定前后都是逆序,…

牛客题解 | 在二叉树中找到两个节点的最近公共祖先

牛客题库题解题目 题目链接 题目的主要信息:给定一棵二叉树以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点 二叉树非空,且每个节点值均不同举一反三: 学习完本题的思路你可以解决如下题目: BM29. 二叉树中和为某一值的路径(一) BM37. …

牛客题解 | 反转链表_1

牛客题库题解题目 题目链接 题目的主要信息:给定一个长度为\(n\)的链表,反转该链表,输出表头举一反三: 学习完本题的思路你可以解决如下题目: JZ6. 从尾到头打印链表 方法一:迭代(推荐使用) 思路: 将链表反转,就是将每个表元的指针从向后变成向前,那我们可以遍历原始…

牛客题解 | 判断链表中是否有环

牛客题库题解题目 题目链接 题目主要信息:给定一个链表的头节点,判断这个链表是否有环 环形链表如下所示:举一反三: 学习完本题的思路你可以解决如下题目: BM4.合并有序链表 BM5.合并k个已排序的链表 BM7.链表中环的入口节点 BM8.链表中倒数最后k个节点 BM9.删除链表的倒数…