VS Code 搭建 C/C++ 编译环境(clang)

2023-11-13

下载安装步骤

1. 下载 LLVM, 安装,比如我的安装在 E: 盘;

2. 下载 MinGW-w64,解压(无需安装);

3. 解压 MinGW-w64 后,将 **\mingw64\ 下的文件拷贝到 LLVM 下(文件夹存在重名,合并即可,无冲突);

我的环境

1. Win10, VS Code;

2. LLVM-clang(9.0.0),Target: x86_64-pc-windows-msvc,Thread model: posix

3.  MinGW-w64(8.1.0),Target: x86_64-w64-mingw32, Thread model: win32

我的几个配置文件信息

settings.json

{
    // 将设置放入此文件中以覆盖默认值和用户设置。

    "files.defaultLanguage": "c", // ctrl+N新建文件后默认的语言
    "editor.formatOnType": true,
    "editor.snippetSuggestions": "top",
    "C_Cpp.clang_format_sortIncludes": true,
    "C_Cpp.errorSquiggles": "Disabled",
    "C_Cpp.autocomplete": "Disabled",
    "clang.cflags": [ // C
        "--target= x86_64-w64-mingw",
        "-std=c11",
        "-Wall"
    ],
    "clang.cxxflags": [ // C++
        "--target= x86_64-w64-mingw",
        "-std=c++17",
        "-Wall"
    ],
    "window.zoomLevel": 1,
}

launch.json

// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg",       // 配置类型,这里只能为cppdbg
            "request": "launch",    // 请求配置类型,可以为launch(启动)或attach(附加)
            //"program": "${fileDirname}/${fileBasenameNoExtension}.o",   // 将要进行调试的程序的路径
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe", 
            "args": [],             // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": true,   // 设为true时程序将暂停在程序入口处,我一般设置为true
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录
            "environment": [],     
            //"externalConsole": true,    // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
            "MIMode": "gdb",        // 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
            "windows": {
                "program": "${fileDirname}/${fileBasenameNoExtension}.exe",
                "miDebuggerPath": "E:/LLVM/bin/gdb.exe" // 调试器路径,Windows下后缀不能省略
            },
            "setupCommands": [      
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
        }
    ]
}

tasks.json

// https://code.visualstudio.com/docs/editor/tasks
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build", // 任务名称, 与launch.json的preLaunchTask相对应
            // 如果使用Clang编写C语言, 把command的值改成clang。
            "command": "clang",      // 编译c语言
            // 如果使用MinGW, 编译C用gcc, 编译c++用g++, 并把-target和-fcolor那两条删去
            //"command": "clang++", // 编译C++
            "args": [
                "${file}",
                "-o", // 指定输出文件名, 不加该参数则默认输出a.exe, Linux下默认a.out
                "${fileDirname}/${fileBasenameNoExtension}.exe",
                "-g", // 生成和调试有关的信息
                "-Wall", // 开启额外警告
                "-static-libgcc", // 静态链接
                "-fcolor-diagnostics", // 彩色的错误信息?但貌似clang默认开启而gcc不接受此参数
                "--target=x86_64-w64-mingw", // clang的默认target为msvc, 不加这一条就会找不到头文件;Linux下去掉这一条
                "-std=c11" // C语言最新标准为c11, 或根据自己的需要进行修改
            ], // 编译命令参数
            "windows": {
                "args": [
                    "${file}",
                    "-o", // 指定输出文件名, 不加该参数则默认输出a.exe, Linux下默认a.out
                    "${fileDirname}/${fileBasenameNoExtension}.exe",
                    "-g", // 生成和调试有关的信息
                    "-Wall", // 开启额外警告
                    "-static-libgcc", // 静态链接
                    "-fcolor-diagnostics", // 彩色的错误信息?但貌似clang默认开启而gcc不接受此参数
                    "--target=x86_64-w64-mingw", // clang的默认target为msvc, 不加这一条就会找不到头文件;Linux下去掉这一条
                    "-std=c11" // C语言最新标准为c11, 或根据自己的需要进行修改
                ]
            },
            "presentation": {
                "echo": false,
                "reveal": "always", // 在“终端”中显示编译信息的策略, 可以为always, silent, never。具体参见VSC的文档
                "focus": true,     // 设为true后可以使执行task时焦点聚集在终端, 但对编译c和c++来说, 设为true没有意义
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": "absolute",
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        {
            "label": "Run",
            "type": "shell",
            "dependsOn": "Build",
            "command": "${fileDirname}/${fileBasenameNoExtension}.o",
            "windows": {
                "command": "${fileDirname}/${fileBasenameNoExtension}.exe"
            },
            "args": [],
            "presentation": {
                "reveal": "always",
                "focus": true
            },
            "problemMatcher": [],
            "group": {
                "kind": "test",
                "isDefault": true
            }
        }
    ]
}

c_cpp_proterties.json

{
    "configurations": [
        {
            "name": "MinGW",
            "includePath": [
                "${workspaceFolder}",
                "E:/LLVM/lib/gcc/x86_64-w64-mingw32/**",                
                "E:/LLVM/include",
                "E:/LLVM/x86_64-w64-mingw32/include"     
            ],
            "browse": {
                "path": [
                    "${workspaceFolder}",
                    "E:/LLVM/x86_64-w64-mingw32/include",
                    "E:/LLVM/lib/gcc/x86_64-w64-mingw32/8.1.0/**",
                    "F:/LLVM/include/**"
                ],
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": ""
            },
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "E:/LLVM/bin/gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

本文参考资料:

vscode C/C++编译运行环境搭建(使用clang,推荐)

VSCode搭建C++/C调试编译环境(使用DevC++)(推荐)

windows下使用vscode编写运行以及调试C/C++(推荐)

vscode 配置C++编译环境(完美版)

在VS Code中使用Clang作为你的C++编译器

【VSCode】Windows下VSCode编译调试c/c++

Visual Studio Code (vscode) 配置C、C++环境/编译并运行

相关问题解决:

VScode编译C++,头文件显示not found的解决方法
VSCODE调试代码时.exe文件不存在

How to use clang with mingw-w64 headers on windows

VsCode使用Clang头文件找不到

背景知识

VS code 中的各种变量 ${file},${fileBasename}

VSCode launch.json中的各种替换变量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等

给vscode的运行任务tasks.json添加快捷键绑定功能

VScode编译C++,头文件显示not found的解决方法

为什么使用clang 不使用 gcc

clang代替gcc - taolusi - 博客园

使用gcc的相关配置:

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "targetArchitecture": "x64",   // 生成目标架构,一般为x86或x64,
            "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "E:/Dev-CPP/MinGW64/bin/gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
           "preLaunchTask": "gcc.exe build" // 调试会话开始前执行的任务,一般为编译程序,一般为编译程序,c++为g++, c为gcc。与tasks.json的label相对应
        }
    ]
}

task.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "gcc.exe build",
            "command": "E:\\Dev-Cpp\\MinGW64\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "E:\\Dev-Cpp\\MinGW64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        }
    ]
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS Code 搭建 C/C++ 编译环境(clang) 的相关文章

  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • CV综述目标检测整理---目录

    CV综述目标检测整理 目录 Object detection yolo系列 yolov3 从yolo入门目标检测 链接 YOLOV3论文解读与应用 https blog csdn net weixin 42466194 article de
  • codeforces 733D--Kostya the Sculptor

    Description Kostya is a genial sculptor he has an idea to carve a marble sculpture in the shape of a sphere Kostya has a
  • 威胁情报

    2020 05 01 引言 之前总是看到各种威胁情报 各种乱七八糟的定义 各种什么高级的词汇 什么上下文 什么攻击 统统看不懂 但是你去搜索威胁情报 国内几家比较知名的 或者说国外的 发现他们的网站提供的服务 就是IP 域名 文件检测这些内
  • MyEclipse报错:Multiple markers at this line

    Multiple markers at this line The type java io ObjectInputStream cannot be resolved It is indire 出错原因 jdk版本太高 不兼容而引起的问题
  • 大数据好不好学,有这几大步骤你就懂了

    很多初学者在萌生向大数据方向发展的想法之后 不免产生一些疑问 应该怎样入门 应该学习哪些技术 学习路线又是什么 所有萌生入行的想法与想要学习Java的同学的初衷是一样的 岗位非常火 就业薪资比较高 前景非常可观 基本都是这个原因而向往大数据
  • 安卓逆向入门指南:修改与重打包应用

    安卓逆向入门指南 修改与重打包应用 概述 介绍修改与重打包应用的目的和应用场景 强调合法性和道德准则 在逆向工程过程中需要遵守相关法律法规 理解应用结构与资源 APK文件结构 解释APK文件的基本结构 包括AndroidManifest x
  • Spring Boot2.x 整合lettuce redis 和 redisson

    前言 springboot2之前redis的连接池为jedis 2 0以后redis的连接池改为了lettuce lettuce能够支持redis4 需要java8及以上 lettuce是基于netty实现的与redis进行同步和异步的通信
  • 基于RFID技术的预制件管理系统的开发

    1 简介 随着计算机 通讯技术和消费电子产品 正如人们通常所知的3C数码产品 的到来 已经在人们生活的各个领域带来了改变 通过这些3C技术 在将来 信息的传播和获取将变得更加便利 电子化管理技术正在向移动管理概念转变 射频识别系统 RFID
  • 微信支付官方SDK PHP版本接入记录

    1 下载证书 下载商家支付证书 这里忽略步骤 下载的证书我们放在E wwwroot certs wx 目录下 一共有4个文件 apiclient cert p12 apiclient cert pem apiclient key pem 证
  • [linux-022]ubuntu20.04用virtualbox安装64位win10彻底解决“directory ezboot not found”问题

    1 这问题是由于win10的iso文件超过4g导致的 2 解决关键 需要一个小尺寸的能用winpe启动的iso镜像 这个镜像有磁盘分区工具和ghost 3 在virtualbox创建win10 64虚拟机 硬盘50g 4 给这个虚拟机挂上两
  • PHP 之session cookie

    cookie和session有什么用 常见的用法 比如在有些网站下载东西需要会员先登陆 http协议本身是无状态的 无法得知顾客是否已经登陆 怎么办呢 cookie和session就可以知道 再比如网上购物 用户身份认证 程序状态记录 购物
  • shell经典面试题根据文件创建用户名及密码(亲测)

    转载来源 shell经典面试题根据文件创建用户名及密码 https www jianshu com p eeb455eef7ca 01 前言 shell脚本已经学习了很长一段时间了 现在时不时来看一些经典的面试题 复习一些常用知识点 温故知
  • IDEA必备的10款插件

    目录 1 Vuesion Theme 2 lombok 3 File Expander 4 GitToolBox 5 Maven Helper 6 Translation 7 arthas idea 8 Free Mybatis plugi
  • 递归问题------汉诺塔

    递归问题实际上是入栈出栈的一个过程 但有时候也会比较难理解 虽然用起来是比较方便的 1 include
  • windows文件传到linux导致文件类型错误处理

    问题 hadoop hadoop001 hadoop 2 6 0 cdh5 7 0 sbin start dfs sh 18 11 27 16 24 25 WARN util NativeCodeLoader Unable to load
  • VC++----using namespace std问题

    写一个简单的代码 cpp view plain copy print
  • 大数据组件-Flume集群环境的启动与验证

    大数据学习记录篇 持续更新中 个人主页 beixi 本文章收录于专栏 点击传送 大数据学习 持续更新中 感谢各位前辈朋友们支持学习 上一篇文章写到了Flume集群环境的安装 这篇文章接着上篇文章延伸Flume集群环境的启动与验证 如果Flu
  • JS:三种常用的函数定义方式

    js中函数也是一个对象 我们可以通过调用构造函数即new Function 的方式来定义 但是在 JavaScript 中 很多时候要尽量避免使用 new 关键字 因此这种方式并不推荐 了解即可 通常使用以下三种定义方式 命名函数 即最基本
  • ARMV8体系结构简介:AArch64系统级体系结构之Self-hosted debug

    1 前言 2 关于self hosted debug Debugger调试器 是操作系统或系统软件的一部分 它会处理debug exception或修改debug system register debugger运行在EL0 提供了用户de
  • VS Code 搭建 C/C++ 编译环境(clang)

    下载安装步骤 1 下载 LLVM 安装 比如我的安装在 E 盘 2 下载 MinGW w64 解压 无需安装 3 解压 MinGW w64 后 将 mingw64 下的文件拷贝到 LLVM 下 文件夹存在重名 合并即可 无冲突 我的环境 1