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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停感叹的老林_<C 语言编程核心突破>

不打赏的人, 看完也学不会.

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值