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语言入门


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

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

相关文章

js中的 map 方法遍历

map方法// map 方法不改变原本的数组 所以要将map之后的值赋值给一个新的变量 // ...item 的作用是 // 将调用 map 函数的数组里的所有数据 都复制到新的&#xff0c;接收map之后的数组中 // 在此基础上 再覆盖或者添加新的数据&#xff0c;如 outpatient 和 recommended 属性/…

​​​【收录 Hello 算法】9.4 小结

目录 9.4 小结 1. 重点回顾 2. Q & A 9.4 小结 1. 重点回顾 图由顶点和边组成&#xff0c;可以表示为一组顶点和一组边构成的集合。相较于线性关系&#xff08;链表&#xff09;和分治关系&#xff08;树&#xff09;&#xff0c;网络关系&#xff08;图&am…

Defog发布Llama-3-SQLCoder-8B,文本转SQL模型,性能比肩GPT-4,准确率超90%,消费级硬件可运行

前言 在计算语言学领域&#xff0c;将自然语言转化为可执行的SQL查询是一个重要的研究方向。这对于让那些没有编程或SQL语法知识的用户也能轻松访问数据库信息至关重要。Defog团队近日发布了基于Llama-3的SQLCoder-8B模型&#xff0c;它在文本转SQL模型领域取得了显著突破&…

2024.05.23 学习记录

1、 react hooks 面经复习 2、xiaolin coding 计算机网络 复习 3、组件库 subMenu、test测试、tabs组件初步开发完成 4、代码随想录刷题&#xff1a;动态规划 01背包 all

MyBatisPlus标准分页功能制作,以及设置分页拦截器,selectPage(new Page<>(current,size),null)

目录 1、设置分页拦截器 2、创建数据库及表 3、pom.xml 4、添加MP的相关配置信息 application.yml 5、根据数据库表创建实体类 User 6、创建 UserDao 接口 7、编写引导类 8、编写测试类 9、Run的运行结果 1、设置分页拦截器 package com.example.config; import com.baomidou.m…

Linux: network: send 失败的时候要不要close socket?

最近遇到一个例子&#xff0c;说有zerowindow出现&#xff1b;出现的原因是接收方的CPU被其他程序吃光&#xff0c;导致socket的read函数处理非常慢。说明接收端的接收缓存不够用。发送端自然而然的要停止发送。 但是如果在接收方的recv buff&#xff0c;以及发送方的send buf…

探索移动云:我的ES与Kibana之旅

目录 引言&#xff1a; 如何免费体验移动云产品 登录并完成实名认证 选择试用ECS云主机 安全组配置 安装Elasticsearch和Kibana 安装Elasticsearch ​编辑安装kibana 测试结果 使用感觉 引言&#xff1a; 移动云技术产品的发展已经取得了巨大的进步。云数融合、A1、大…

解决vite打包只生成了一个css和js文件问题

文章目录 1. 打包遇到的问题2. 问题原因及修改3. 调整后再次打包&#x1f197; 1. 打包遇到的问题 今天整了一个项目&#xff0c;试了下打包&#xff0c;发下打包后只生成了一个css文件&#xff0c;和一个js文件&#xff0c; 这样肯定是不行的&#xff0c;因为这样这个文件的包…

Windows:iHasher-v0.2安装报错Windows 功能 .NET Framework 3.5

一、情景描述 我们从MSDN下载了镜像文件&#xff0c;一般要验证下载文件的HASH值是否与MSDN上发布的一致&#xff0c;确保传出过程中iso文件没有损坏。 MSDN地址&#xff1a;https://msdn.itellyou.cn/ 我从MSDN下载了Hasher工具&#xff0c;进行校验。 但是&#xff0c;安装…

Marker可以快速且准确地将PDF转换为markdown格式。

Marker Marker可以快速且准确地将PDF转换为markdown格式。 支持多种文档类型&#xff08;针对书籍和科学论文进行了优化&#xff09;支持所有语言移除页眉/页脚/其他杂质格式化表格和代码块提取并保存图像以及markdown将大多数方程转换为latex支持在GPU、CPU或MPS上运行 工作…

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天&#xff0c;人们对于生活品质的需求日益提升&#xff0c;期待居住环境能与科技深度融合&#xff0c;实现高效、舒适、安全的生活体验。在此背景下&#xff0c;智慧社区管理系统应运而生&#xff0c;旨在借助现代信息技术手段&…

[机缘参悟-185] - 《道家-水木然人间清醒1》读书笔记 - 真相本质 -8- 认知觉醒 - 逻辑谬误、认知偏差:幸存者偏差

目录 前言&#xff1a; 一、幸存者偏差 二、幸存者偏差在现实中的应用 第一个故事&#xff1a; 第二个故事&#xff1a; 三、生活中的幸存者偏差 四、迷恋成功者经验的原因&#xff1a;鸡汤、幻想、传奇、希望 备注&#xff1a; 前言&#xff1a; 幸存者偏差&#xff0…

从需求角度介绍PasteSpider(K8S平替部署工具适合于任何开发语言)

你是否被K8S的强大而吸引&#xff0c;我相信一部分人是被那复杂的配置和各种专业知识而劝退&#xff0c;应该还有一部分人是因为K8S太吃资源而放手&#xff01; 这里介绍一款平替工具PasteSpider&#xff0c;PasteSpider是一款使用c#编写的linux容器部署工具(使用PasteSpider和…

k8s集群的声明式管理资源

一 声明式管理方法 1 适合于对资源的修改操作&#xff08;陈述式方式修改资源非常不方便&#xff09; 2 声明式资源管理方法依赖于yaml资源配置清单文件对资源进行管理 资源配置清单文件有两种格式&#xff1a;yaml&#xff08;人性化&#xff0c;易读&#xff09;&#xff…

集成构建流程之根文件系统Buidroot

编译流程 单板信息 #---- device/milkv-duos-sd/boardconfig.sh export MV_BOARDmilkv-duos-sd export MV_BOARD_CPUcv1813h export MV_VENDORmilkv export MV_BUILD_ENVmilkvsetup.sh export MV_BOARD_LINKcv1813h_milkv_duos_sd 通用编译脚本&#xff1a;build.sh #---- b…

MySQL 视图(1)

常用视图语句 -- 创建视图 CREATE VIEW t1_view AS SELECT * FROM t1; CREATE VIEW v AS VALUES ROW(1,2);-- 查询视图 SELECT * FROM t1_view;-- 查询视图的相关系统视图 SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = test AND TABLE_NAME =…

MATLAB基础应用精讲-【数模应用】调节中介作用分析(附R语言代码实现)

目录 算法原理 什么是调节中介作用分析 中介调节模型 一概念

LLaMA2详解

padding_side llama系列训练和推理都是right padding&#xff1a; 训练&#xff1a;其实只要设置padding mask&#xff0c;那么left/right pad是没有区别的。然而实际上huggingface中某些tokenizer在training的时候必须设成right padding&#xff0c;因为有些tokenizer使用的是…

【智能算法应用】遗传算法求解车间布局优化问题

目录 1.问题背景2.车间布局数学模型3.算法过程4.结果展示5.参考文献6.代码获取 1.问题背景 工厂设施布置的规划一直是工业工程领域不断研究和探索的内容&#xff0c; 其中最具代表性之一的是系统布置设计( system layout planning&#xff0c; SLP) 方法。作为一种经典且有效的…

flink程序本地运行报: A JNI error has occurred和java.lang.NoClassDefFoundError

1.问题描述 在idea中运行flink job程序出现如下错误&#xff1a; Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/api/common/io/FileInputFormat …