跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

  1. 主页
  2. Open source | 开源
  3. xlings
  4. C++23: import std工程模板 - cmake + ninja + gcc15 及不同版本CMAKE_EXPERIMENTAL_CXX_IMPORT_STD对应的ID号

C++23: import std工程模板 - cmake + ninja + gcc15 及不同版本CMAKE_EXPERIMENTAL_CXX_IMPORT_STD对应的ID号

已定时 已固定 已锁定 已移动 xlings
cmakegccc++23import stdxlings项目模板开源
1 帖子 1 发布者 52 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • SPeakS 在线
    SPeakS 在线
    SPeak d2learn-dev
    编写于 最后由 SPeak 编辑
    #1

    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
    

    4fbab89d-39ce-431e-8e5a-990fc85f33ce-image.png

    注: 使用默认gun make会报错提示: Unsupported generator: Unix Makefiles

    2f9f701b-c79f-4fbe-b24d-e0da407bd4db-image.png

    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到和自己版本一样的分支 -- 这是个坑点

    01cd4e86-ace4-4549-819e-8547ec843c11-image.png

    3 一键生成项目模板并配置好环境

    我给以上模板和环境添加到了xlings工具, 只要一行命令就能生成这个模板并配置好工具链依赖, 对应模板名为cpp23-cmake-helloworld, 完整命令和生成文件(README里包含构建说明)如下

    xlings new --template cpp23-cmake-helloworld
    

    ea918e38-e351-40e9-a4a5-05e05f76b241-image.png

    4 Other

    • 原文 - d2learn论坛
    • xlings工具 - Github
    • xlings - 项目模板cpp23-cmake-helloworld仓库
    • cmake文档1 - import std基础用法
    • cmake文档2 - CMAKE_CXX_COMPILER_IMPORT_STD版本要求
    • cmake文档3 - CMAKE_CXX_COMPILER_IMPORT_STD的id
    1 条回复 最后回复
    0

    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    d2learn forums Powered by NodeBB
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门
    • Online Tools
    • 用户
    • 群组