在Windows上结合CMake使用C++20的新特性Modules

本篇文章简要介绍如何在 Windows 上结合 CMake 使用 C++ 20 的新特性 modules。
为什么非要使用 CMake?对于中大型项目,使用构建工具能够方便我们管理构建项目所需要的依赖。CMake 是 C++ 构建工具中比较流行的一种。

1. 源代码

下面进入正题。项目的结构如下所示:
在这里插入图片描述
mymath.cppm 文件中的内容如下:

module;   // 告知编译器这是一个module

export module mymath;	// 对外导出模块mymath

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

export int multiply(int a, int b) {
    return a * b;
} 

main.cpp 文件中的内容:

// main.cpp
import mymath;

#include <iostream>

int main() {
    int a = 5;
    int b = 3;

    std::cout << "Add: " << add(a, b) << std::endl;
    std::cout << "Multiply: " << multiply(a, b) << std::endl;

    return 0;
}

CMakeLists.txt 文件中的内容:

cmake_minimum_required(VERSION 3.28)  # 从 cmake3.28 开始支持C++20
project(std_module_example CXX)

# set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")

# Default to C++ extensions being off. Clang's modules support have trouble
# with extensions right now and it is not required for any other compiler
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_CXX_STANDARD 20)
add_library(mymath)

# target_sources()用来为目标(库或可执行文件)添加源文件。
target_sources(mymath
  PUBLIC  # 表示该模块可以被其它目标使用
    FILE_SET cxx_modules TYPE CXX_MODULES FILES  # 指定源文件的类型为C++模块
    mymath.cppm
)
add_executable(hello main.cpp)
target_link_libraries(hello PRIVATE mymath)

2. 构建项目

在项目的当前目录下创建 build 目录,然后进入build 目录。
输入cmake .. 构建项目:
在这里插入图片描述
需要确保构建的编译器支持 C++ 20特性。

然后,编译项目,输入:cmake --build .
在这里插入图片描述
执行可执行文件:
在这里插入图片描述
遇到的问题:

  • 编译器无法自动补全自己创建的 module。原因:可能是编译器的自动补全没有检测到自定义的模块。这个问题未能解决,不过并不影响编译。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值