<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[C++23: import std工程模板 - cmake + ninja + gcc15 及不同版本CMAKE_EXPERIMENTAL_CXX_IMPORT_STD对应的ID号]]></title><description><![CDATA[<h1>0.概要</h1>
<p dir="auto">本文主要介绍如下内容:</p>
<ul>
<li>1.cmake + ninja + gcc15(或其他支持import std的编译器)如何搭建一个支持import std(标准库模块化)特性的项目/工程模板</li>
<li>2.cmake不同版本CMAKE_EXPERIMENTAL_CXX_IMPORT_STD功能对应的ID怎么确定</li>
<li>3.如何使用xlings工具一键生成这样的项目模板并自动配置好环境 - <strong>想快速体验的朋友可以直接看第3节</strong></li>
</ul>
<h1>1.最小项目模板及构建</h1>
<h2>1.1 目录结构</h2>
<pre><code class="language-bash">├── build - 构建目录(后期生成)
├── CMakeLists.txt - 工程描述文件
├── config.xlings
├── README.md
└── src
    └── main.cpp - 源码文件

3 directories, 4 files
</code></pre>
<h2>1.2 HelloWorld代码 - src/main.cpp</h2>
<blockquote>
<p dir="auto">通过一行<code>import std</code>导入标准库, 然后不需要一个一个<code>include</code>就能使用标准库里的工具, 例如下面的<code>println</code></p>
</blockquote>
<pre><code class="language-cpp">import std;

int main() {
    std::println("Hello, C++23 modules!");
}
</code></pre>
<h2>1.3 工程描述文件</h2>
<blockquote>
<p dir="auto">在cmake的描述文件<code>project</code>定义前启用<code>import std</code>特性, 并设置相关C++23标准及模块std, 其中cmake需要3.3及以上才支持<code>CMAKE_EXPERIMENTAL_CXX_IMPORT_STD</code>并不同版本对应ID可能不一样(后面会介绍确定方法)</p>
</blockquote>
<pre><code class="language-python">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)
</code></pre>
<h2>1.4 构建&amp;环境要求</h2>
<blockquote>
<p dir="auto">使用cmake生成ninja的构建文件, 然后使用ninja进行。这里需要注意的是当前不支持默认的GUN Make</p>
</blockquote>
<ul>
<li>ninja</li>
<li>cmake 4.0.2</li>
<li>gcc 15 或 支持import std特性的编译器(clang...</li>
</ul>
<pre><code class="language-bash">mkdir build &amp;&amp; cd build
cmake -G Ninja ..
ninja -v
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1749316672444-4fbab89d-39ce-431e-8e5a-990fc85f33ce-image.png" alt="4fbab89d-39ce-431e-8e5a-990fc85f33ce-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>注: 使用默认gun make会报错提示: Unsupported generator: Unix Makefiles</strong></p>
<p dir="auto"><img src="/assets/uploads/files/1749316947208-2f9f701b-c79f-4fbe-b24d-e0da407bd4db-image.png" alt="2f9f701b-c79f-4fbe-b24d-e0da407bd4db-image.png" class=" img-fluid img-markdown" /></p>
<h1>2 CMAKE_EXPERIMENTAL_CXX_IMPORT_STD不同版本对应的ID</h1>
<p dir="auto">应该不少朋友是卡在了这一步, 由于cmake这个功能还是实验性质的所以要满足以下要求:</p>
<ul>
<li>cmake版本大于等于3.30</li>
<li>要使用和自己版本匹配CMAKE_EXPERIMENTAL_CXX_IMPORT_STD的id号</li>
</ul>
<p dir="auto">这个id号在cmake的github文档中: <a href="https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst" rel="nofollow ugc">https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst</a><br />
<strong>但由于默认文档是master分支可能id和你的版本是不匹配的, 所以查找时要切换tag到和自己版本一样的分支 -- 这是个坑点</strong></p>
<p dir="auto"><img src="/assets/uploads/files/1749317418282-01cd4e86-ace4-4549-819e-8547ec843c11-image-resized.png" alt="01cd4e86-ace4-4549-819e-8547ec843c11-image.png" class=" img-fluid img-markdown" /></p>
<h1>3 一键生成项目模板并配置好环境</h1>
<blockquote>
<p dir="auto">我给以上模板和环境添加到了<a>xlings</a>工具, 只要一行命令就能生成这个模板并配置好工具链依赖, 对应模板名为<code>cpp23-cmake-helloworld</code>, 完整命令和生成文件(README里包含构建说明)如下</p>
</blockquote>
<pre><code class="language-bash">xlings new --template cpp23-cmake-helloworld
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1749317918593-ea918e38-e351-40e9-a4a5-05e05f76b241-image.png" alt="ea918e38-e351-40e9-a4a5-05e05f76b241-image.png" class=" img-fluid img-markdown" /></p>
<h1>4 Other</h1>
<ul>
<li><a href="https://forum.d2learn.org/topic/94" rel="nofollow ugc">原文 - d2learn论坛</a></li>
<li><a href="https://github.com/d2learn/xlings" rel="nofollow ugc">xlings工具 - Github</a></li>
<li><a href="https://github.com/d2learn/xlings-project-templates/tree/main/cpp23/cmake/helloworld" rel="nofollow ugc">xlings - 项目模板cpp23-cmake-helloworld仓库</a></li>
<li><a href="https://www.kitware.com/import-std-in-cmake-3-30" rel="nofollow ugc">cmake文档1 - import std基础用法</a></li>
<li><a href="https://cmake.org/cmake/help/latest/variable/CMAKE_CXX_COMPILER_IMPORT_STD.html" rel="nofollow ugc">cmake文档2 - CMAKE_CXX_COMPILER_IMPORT_STD版本要求</a></li>
<li><a href="https://github.com/Kitware/CMake/blob/master/Help/dev/experimental.rst" rel="nofollow ugc">cmake文档3 - CMAKE_CXX_COMPILER_IMPORT_STD的id</a></li>
</ul>
]]></description><link>http://forum.d2learn.org/topic/94/c-23-import-std工程模板-cmake-ninja-gcc15-及不同版本cmake_experimental_cxx_import_std对应的id号</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 16:05:32 GMT</lastBuildDate><atom:link href="http://forum.d2learn.org/topic/94.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Jun 2025 17:47:39 GMT</pubDate><ttl>60</ttl></channel></rss>