2024-05-23 vscode + clang + clangd 解锁 modules


点击 <C 语言编程核心突破> 快速C语言入门


vscode + clang + clangd 解锁 modules

  • 前言
  • 一、准备
  • 二、使用
      • 备注:
  • 总结


前言

要解决问题: 昨天解锁VS使用modules, 但是不完美, 没有代码提示和补全了, 今天用 vscode + clang + clangd 解锁 modules, 同时还有代码补全及提示.

想到的思路: 误打误撞, 发现clang18也支持modules, 配合 vscode 及 clangd 还可以有代码提示和补全.

其它的补充: 原来我以为没有头文件就没有代码补全, 看来我想多了, 这不是问题, 可以解决.


一、准备

我个人是使用 msys2 资源管理系统来管理工具链, 目前 msys2 最新的 clang版本是 clang18, 赶紧升级, 途中遇到了一些困难, 就是系统中有很多库都依赖老版本的工具链上的库, 为了升级, 只能暂时不管这些, 如果从事生产, 那不太可行, 对于我这种小打小闹的, 就没什么了, 总之自己做主吧.

首先, clang 没有给你准备好 std 标准模块, 需要自己编译, 你需要找到 std.cppm 这个文件, 如果找不到, 那可能版本不对, 就编译不了了.

为了能够实现代码补全, 配合 std.cppm 的还有一大堆 .inc文件, 所以就不列出具体内容了, 太多放不下.

预编译的过程十分简单, 在终端下, 输入如下命令, 注意, 为了保证二进制兼容, 尽量使用你平常编译时的命令, 这个和 VS 是一样的, 编译命令不一样, 模块就无法兼容.

C++ 标准必须在 C++20 及以上, 这个是必选项, 因为默认的不是这个版本.

clang++ -std=c++20 std.cppm --precompile -o std.pcm

使用的时候也是一条命令:

clang++ -std=c++20 main.cpp -fmodule-file=std=std.pcm std.pcm -o main.exe

注意使用模块的格式: 一个是告诉编译器, std模块的文件名, 一个是链接的文件名, 我试过, 缺一个都不行, 并且要给出路径, 要不然编译器不知道在哪.

-fmodule-file=std=std.pcm std.pcm

二、使用

使用起来就非常简单了, 配合 clangd 需要做如下设置:

compile_flags.txt 这个文件下(如果不知道这个文件, 自己查一下或者看我的设置编译链的文章2022-03-30 VsCode中使用clangd插件的各种设置)

-xc++
-std=c++20
-stdlib=libc++
-fexperimental-library
-fmodule-file=std=E:\msys64\clang64\share\libc++\v1\std.pcm
-Wall

tasks.json 文件中进行相应配置:

注意 std.pcm 的文件路径, 如果你不知道怎么设置, 直接使用绝对路径, std.cppm 和 std.pcm 要放在一起, 这个是补全和代码提示的需要.

同时, 编译命令要与编译模块时的命令相同, 否则可能产生问题.

            "args": [
                "-glldb",
                "-std=c++20",
                "-fmodule-file=std=std.pcm",
                "std.pcm",
                "${fileBasename}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
            ],

现在可以愉快的使用带有代码补全和提示的模块引入了.
在这里插入图片描述

备注:

还有疑问, 可参考 clang18 官方文档 Standard C++ Modules


总结

c++20 标准已经过去4年了, 终于实现了 modules 的功能, 且解决了代码提示和补全的后顾之忧, 可以愉快的编程了.


点击 <C 语言编程核心突破> 快速C语言入门


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十一章 文件及IO操作

第十一章 文件及IO操作 文件的概述及基本操作步骤 文件&#xff1a; 存储在计算机的存储设备中的一组数据序列就是文件不同类型的文件通过后缀名进行区分 文本文件&#xff1a;由于编码格式的不同&#xff0c;所占磁盘空间的字节数不同(例如GBK编码格式中一个中文字符占2字…

K8S集群再搭建

前述&#xff1a;总体是非常简单的&#xff0c;就是过程繁琐&#xff0c;不过都是些重复的操作 master成员: [controller-manager, scheduler, api-server, etcd, proxy,kubelet] node成员: [kubelet, proxy] master要修改的配置文件有 1. vi /etc/etcd/etcd.conf # 数…

【设计模式深度剖析】【4】【创建型】【建造者模式】| 类比选购汽车的过程,加深理解

&#x1f448;️上一篇:抽象工厂模式 | 下一篇:原型模式&#x1f449;️ 目录 建造者模式概览定义英文原话直译如何理解呢&#xff1f;建造者模式将对象的建造过程给抽象出来了类比选购汽车 4个角色UML类图1. 抽象建造者&#xff08;Builder&#xff09;角色2. 具体建造者…

盲人社会适应性训练:打开生活的新篇章

在现代社会的快节奏中&#xff0c;每一位成员都在寻求更好的方式来适应环境&#xff0c;对于盲人群体而言&#xff0c;这种适应性尤为关键。盲人社会适应性训练作为一个旨在提升盲人生活质量和独立性的系统性过程&#xff0c;正逐步受到广泛关注。在这一过程中&#xff0c;一款…

安灯呼叫系统解决方案在生产中的应用

工厂安灯呼叫系统是一种用于监控工厂设备运行情况和生产状况的系统。它通常包括各种传感器和监控设备&#xff0c;可以实时监测工厂的生产流程&#xff0c;提供运行状态、故障警报、生产效率等信息。通过工厂安灯系统&#xff0c;工厂管理人员可以及时了解生产情况&#xff0c;…

探数API统计分享-中国各省人均消费支出

根据2017年至2021年的统计数据&#xff0c;我国各省&#xff08;市、区&#xff09;的人均消费支出情况各不相同。其中&#xff0c;上海的人均消费支出最高&#xff0c;达到了2021年的48879元&#xff0c;位居全国之首。紧随其后的是北京&#xff0c;人均消费支出为43640元。 相…

肯尼亚大坝决堤反思:强化大坝安全监测的必要性

一、背景介绍 近日&#xff0c;肯尼亚发生了一起严重的大坝决堤事件。当地时间4月29日&#xff0c;肯尼亚内罗毕以北的一座大坝决堤&#xff0c;冲毁房屋和车辆。当地官员称&#xff0c;事故遇难人数已升至71人。这起事件再次提醒我们&#xff0c;大坝安全无小事&#xff0c;监…

【机器学习高级】强化学习综述

文章目录 一、说明二、强化学习是什么&#xff1f;2.1 与现代神经网络的相异2.2 强化学习属于行为学派2.3 强化学习数学支持 三、强化学习有什么好处&#xff1f;3.1 在复杂环境中表现出色3.2 需要较少的人际互动3.3 针对长期目标进行优化 四、强化学习有哪些用例&#xff1f;4…

到底什么是数字?

来源&#xff1a;Bulletins from the Wolfram Physics Project 一、说明 数字这个概念是最普遍而又最难把控的概念。对数字概念的深度解读&#xff0c;决定人类社会方方面面的整体水平。而且&#xff0c;随着宇宙知识的认识&#xff0c;数字概念也似乎在膨胀中。 外星人乘坐星际…

Transformer,革命性的深度学习架构

Transformer 是一种革命性的深度学习架构,专门设计用于处理序列数据,特别是在自然语言处理(NLP)任务中表现卓越。它由 Vaswani 等人在 2017 年发表的论文《Attention is All You Need》中首次提出,打破了当时基于循环神经网络(RNN)和卷积神经网络(CNN)的序列建模常规,…

Tailwind CSS快速入门

文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它通过提供大量的原子类&#xff08;utility classes&#xff09;…

【Android14 ShellTransitions】(二)创建Transition

这一节的内容在WMCore中&#xff0c;主要是创建Transition&#xff0c;初始化其状态为PENDING。 还是我们之前说的&#xff0c;我们以在Launcher界面点击App图标启动某个App为例&#xff0c;来分析Transition的一般流程。启动Activity的流程&#xff0c;在ActivityStarter.star…

[桌面端应用开发] 从零搭建基于Caliburn的图书馆管理系统(C#合集)

图书馆系统要求&#xff1a; 你是一家新市图书馆的经理。 图书馆拥有大量藏书和不断增长的会员。 为了使图书馆管理更加容易&#xff0c;现在创建一个图书馆管理系统。 图书馆管理系统应具备以下功能&#xff1a; 1.图书管理&#xff1a;系统应该能够向图书馆添加新图书。 每本…

【Linux-驱动开发】

Linux-驱动开发 ■ Linux-应用程序对驱动程序的调用流程■ Linux-file_operations 结构体■ Linux-驱动模块的加载和卸载■ 1. 驱动编译进 Linux 内核中■ 2. 驱动编译成模块(Linux 下模块扩展名为.ko) ■ Linux-■ Linux-■ Linux-设备号■ Linux-设备号-分配■ 静态分配设备号…

【设计模式深度剖析】【2】【结构型】【装饰器模式】| 以去咖啡馆买咖啡为例 | 以穿衣服出门类比

&#x1f448;️上一篇:代理模式 目 录 装饰器模式定义英文原话直译如何理解呢&#xff1f;4个角色类图1. 抽象构件&#xff08;Component&#xff09;角色2. 具体构件&#xff08;Concrete Component&#xff09;角色3. 装饰&#xff08;Decorator&#xff09;角色4. 具体装饰…

5分钟在 VSCode 中使用 PlantUML 绘图

去年&#xff0c;写过一篇在 VSCode 中使用 PlantUML 的博客&#xff0c;那时候我嫌弃本地安装麻烦&#xff0c;所以采用的是在本地运行 docker 容器的方法部署的 PlantUML 服务端。不过&#xff0c;现在来看这样还必须依赖在本地手动启动 docker 容器&#xff08;如果有一个不…

7.类和对象

类和对象 当我们没有去了解过java的知识点中 不免产生一些问题&#xff1a; 什么是类&#xff1f;什么是对象&#xff1f; 记住一句话&#xff1a;在java当中 一切皆对象 类&#xff1a;是用来描述一个对象的 而对象是一个真正存在的实体 在Java这门纯面向对象的语言中 我们…

Nginx企业级负载均衡:技术详解系列(10)—— Nginx核心配置详解(HTTP配置块)

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 今天咱们聊聊Nginx核心配置中的HTTP配置块&#xff0c;这个配置块在我们的日常使用中极为常见&#xff0c;它的重要性不言而喻。 HTTP配置块在Nginx的配置架构中占据着核心地位&#xff0c;它直接关系到服务器如何处…

panic: concurrent write to websocket connection【golang、websocket】

文章目录 异常信息原由代码错误点 解决办法 异常信息 panic: concurrent write to websocket connection原由 golang 编写 websocket go版本&#xff1a;1.19 使用了第三方框架&#xff1a; https://github.com/gorilla/websocket/tree/main 代码 server.go // Copyright …

蓝桥楼赛第30期-Python-第三天赛题 从参数中提取信息题解

楼赛 第30期 Python 模块大比拼 提取用户输入信息 介绍 正则表达式&#xff08;英文为 Regular Expression&#xff0c;常简写为regex、regexp 或 RE&#xff09;&#xff0c;也叫规则表达式、正规表达式&#xff0c;是计算机科学的一个概念。 所谓“正则”&#xff0c;可以…