C++23: import std工程模板 - cmake + ninja + gcc15 及不同版本CMAKE_EXPERIMENTAL_CXX_IMPORT_STD对应的ID号
-
0.概要
本文主要介绍如下内容:
- 1.cmake + ninja + gcc15(或其他支持import std的编译器)如何搭建一个支持import std(标准库模块化)特性的项目/工程模板
- 2.cmake不同版本CMAKE_EXPERIMENTAL_CXX_IMPORT_STD功能对应的ID怎么确定
- 3.如何使用xlings工具一键生成这样的项目模板并自动配置好环境 - 想快速体验的朋友可以直接看第3节
1.最小项目模板及构建
1.1 目录结构
├── build - 构建目录(后期生成) ├── CMakeLists.txt - 工程描述文件 ├── config.xlings ├── README.md └── src └── main.cpp - 源码文件 3 directories, 4 files
1.2 HelloWorld代码 - src/main.cpp
通过一行
import std
导入标准库, 然后不需要一个一个include
就能使用标准库里的工具, 例如下面的println
import std; int main() { std::println("Hello, C++23 modules!"); }
1.3 工程描述文件
在cmake的描述文件
project
定义前启用import std
特性, 并设置相关C++23标准及模块std, 其中cmake需要3.3及以上才支持CMAKE_EXPERIMENTAL_CXX_IMPORT_STD
并不同版本对应ID可能不一样(后面会介绍确定方法)cmake_minimum_required(VERSION 4.0.2) # https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457") set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_MODULE_STD 1) project(HelloWorld LANGUAGES CXX) add_executable(helloworld src/main.cpp)
1.4 构建&环境要求
使用cmake生成ninja的构建文件, 然后使用ninja进行。这里需要注意的是当前不支持默认的GUN Make
- ninja
- cmake 4.0.2
- gcc 15 或 支持import std特性的编译器(clang...
mkdir build && cd build cmake -G Ninja .. ninja -v
注: 使用默认gun make会报错提示: Unsupported generator: Unix Makefiles
2 CMAKE_EXPERIMENTAL_CXX_IMPORT_STD不同版本对应的ID
应该不少朋友是卡在了这一步, 由于cmake这个功能还是实验性质的所以要满足以下要求:
- cmake版本大于等于3.30
- 要使用和自己版本匹配CMAKE_EXPERIMENTAL_CXX_IMPORT_STD的id号
这个id号在cmake的github文档中: https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst
但由于默认文档是master分支可能id和你的版本是不匹配的, 所以查找时要切换tag到和自己版本一样的分支 -- 这是个坑点3 一键生成项目模板并配置好环境
我给以上模板和环境添加到了xlings工具, 只要一行命令就能生成这个模板并配置好工具链依赖, 对应模板名为
cpp23-cmake-helloworld
, 完整命令和生成文件(README里包含构建说明)如下xlings new --template cpp23-cmake-helloworld
4 Other