如何快速在 VS2026 上使用 C++ 模块 — 完整上手指南

如何快速在 VS2026 上使用 C++ 模块 --- 完整上手指南

前言

现代C++提出了一个非常breakthrough的特性,就是模块,尽管有一些时间的发展了(这个玩意是C++20出的),目前在一些demo case中,VS对模块的支持还OK。笔者也计划试一试逐步开始尝试向自己的一些玩具项目引入module来化简自己工程的依赖处理关系。


为什么要用模块

C++ 模块(C++20)是为了替代传统头文件的一种编译单位机制,在之前,我们如果一个源文件发生更改,这个源文件都需要被全部重新编译,但是模块的增量编译分析到了二进制ABI层次,MSVC的模块(是的,跟其他编译器的厂商实际上不太互通)通过模块二进制接口/BMI 缓存编译产物,而且,这一次的导出更加的健壮,之后我们会介绍两个关键字来告诉你模块的导入和导出是如何工作的。


先决条件

现在VS2022开始下不到了(至少不太好搞到),这就是为什么笔者采用VS2026了。要在 VS2026 上顺利使用模块,请确认以下项目:

  1. Visual Studio 2026(或更新)已安装,并包含 "Desktop development with C++" 工作负载。VS2026 附带 MSVC Build Tools v14.50(IDE 18.0),对模块和语言兼容性有进一步改进。所以现在可以说没啥负担,不用单独开启什么实验特性了,早入正了。
  2. C++ 标准设置 :项目或命令行使用 /std:c++20 或更保守地 /std:c++latest(VS2026 的 MSVC 提供对模块的更完整支持)。不过别担心,VS2026默认就是上面的选项,不用改,你怕的话就看一眼就好了

最小可运行示例(代码与逐步说明)

创建一个小工程 vs2026-modules-demo/,包含两个文件:

math.ixx(模块接口单元):

cpp 复制代码
export module math;

export int add(int a, int b) {
    return a + b;
}

export struct Point { int x, y; };

main.cpp(使用模块):

cpp 复制代码
import std;
import math;

int main()
{
	std::print("Add Result: {}", add(1, 2));
	Point p{ 1,2 };
	std::print("Point p ({}, {})\n", p.x, p.y);
	return 0;
}

说明:MSVC 社区中 .ixx 是常见的模块接口扩展名;你也可以使用 .cppm 等,但 IDE/工具链对扩展名的默认识别可能不同。


在 Visual Studio IDE(VS2026)中使用模块 --- 步骤

Visual Studio 已把大部分模块构建细节交给 MSBuild/IDE 去管理,你通常只需把文件加入项目:

  1. 新建项目Console App (C++)(选择 Desktop development with C++ workload)。
  2. 把模块文件加入项目 :右键项目 → Add → Existing Item → 添加 math.ixxmain.cpp
  3. 确认语言设置 :右键项目 → Properties → C/C++ → Language → C++ Language Standard 选择 ISO C++20 或者是以上( 选择Preview也是可以的),同时,还要再 Properties → C/C++ → Language中开启将生成C++23的标准库模块选择为是
  4. 构建并运行 :IDE 会自动对模块源进行扫描、生成 BMI、并正确设置编译与链接次序;你通常不需要手动指定 .obj。如果模块间依赖复杂(跨项目),可以使用项目引用或在 Project Properties 中配置 Module References。

Reference

相关推荐
caimouse2 小时前
reactos编码规范
c语言·开发语言
xieliyu.6 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
数智工坊7 小时前
机器人运动控制:采样、优化与学习三大流派深度对比与实战
android·学习·机器人
CryptoPP7 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫7 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
阳区欠8 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs8 小时前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
晨曦中的暮雨9 小时前
Golang速通(Javaer版)
java·开发语言·后端·golang
小小编程路9 小时前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
Qt程序员9 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu