当前位置: 首页 > news >正文

2601C++,编写自己模块

编写一个模块并调用

看一下自定义模块的代码:

//exportdemo.hexportmoduledemo;importstd;namespacedemo{exportintAdd(int,int);exportclassexportDemo{public:exportDemo();public:voiddisplay();};}//exportdemo.cppmoduledemo;importstd;namespacedemo{intAdd(inta,intb){returna+b;}exportDemo::exportDemo(){}voidexportDemo::display(){std::cout<<"this is demo module!"<<std::endl;}}

标准的头文件cpp文件,再看一下调用代码:

importstd;importdemo;intmain(){demo::exportDemo d;d.display();std::cout<<"main app!"<<"Add return:"<<demo::Add(1,2)<<std::endl;return0;}

首先使用命令行编译:

1.先编译std.o.

g++-std=c++23-fmodules-ts-fsearch-include-path-c bits/std.cc

当前目录下可发现生成的std.ogcm目录.

2.编译模块文件

g++-std=c++23-fmodules-ts-c exportdemo.h

会报一个错误略.
看错误的说明是不能在头文件放置模块声明,好,那就随便起一个名字,比如exportdemo.cm,再次编译:

g++-std=c++23-fmodules-ts-c exportdemo.cm

会报另一个警告和一个错误略:

看这样子应该是没找到相关输入文件.再次修改文件名exportdemo.cppm重新编译:

g++-std=c++23-fmodules-ts-c exportdemo.cppm

成功编译.给大家留一个问题,该模块文件名是否可随便取 叫exportdemo.ixxexportdemo.ccm,exportdemo.cxxm可不可 还有没有其它的规则限制
在成功编译模块的基础上继续编译.

3.编译所有单元

g++-std=c++23-fmodules-ts-o demo exportdemo.cpp main.cpp

成功编译,在当前路径下有一个示例``可执行文件,执行它:

./demo

说明编译流程整体走通,没有问题.

使用cmake编译

先看一下cmakelists.txt的文件内容:

cmake_minimum_required(VERSION3.31.6)set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD"0e5b6991-d74f-4b3d-a41c-cf096e0b2508")set(CMAKE_CXX_COMPILER"clang++")set(CMAKE_C_COMPILER"clang")set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} -stdlib=libc++")set(CMAKE_EXE_LINKER_FLAGS"${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")set(CMAKE_CXX_EXTENSIONS OFF)set(CMAKE_CXX_STANDARD23)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_MODULE_STD1)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)project(cmakeMouduleFirst LANGUAGES CXX)add_executable(cmakeMouduleFirst)target_sources(cmakeMouduleFirst PRIVATE main.cpp exportdemo.cpp PRIVATE FILE_SET demoMmodules TYPE CXX_MODULES FILES exportdemo.cppm)

文件内容整体和上次的不大差别,主要是增加了新增模块的引用,在target_sources增加相关模块文件编译文件.然后使用cmake编译:

mkdir build&&cd build cmake-G Ninja..

这是原来用g++编译才报得错误啊,想了一下,忽然想到刚刚编译了一个最新cmake4.0,并临时在环境变量里了指定.
会不是是该原因呢 然后查看了一下cmake版本,果然是4.0,重新打开一个终端,再次查看了一下cmake版本,是3.31.6.
重新使用上面的命令编译:

cmake-G Ninja..

成功编译.这就是那个cmake"CMAKE_EXPERIMENTAL_CXX_IMPORT_STD"对应的ID的问题.执行编译后的可执行文件,可渲染与直接编译相同结果.

http://www.jsqmd.com/news/231124/

相关文章:

  • 2601C++,模块基础
  • 云原生大数据架构:Kubernetes在数据平台中的应用
  • (源码)从“刀耕火种”到“数据自由”:一个Python票友(梦幻精灵:cq)四年脚本进化史
  • 多模态RAG系统的实现
  • 数字营销提示工程架构师的成功经验
  • 基于YOLOv8的无人机道路损伤检测[四类核心裂缝/坑洼识别]的识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
  • (源)从手机键盘到正则解析:我的四年CSDN博文数据自由之路
  • 市场快评 · 今日复盘20260111
  • AI原生应用领域个性化定制的未来趋势
  • 深度测评9个AI论文平台,本科生轻松搞定毕业论文!
  • 大数据安全运维:日常监控与应急响应策略
  • 技术进步对程序员职业的影响
  • 圆上某一段弧的中点坐标求法
  • 导师严选2026 AI论文网站TOP8:本科生毕业论文写作全测评
  • 艺术疗愈促进非语言沟通的系统性解析——从神经生物学到现象学:解锁无言心声的深度路径
  • Spec-Driven Development (SDD) 框架与开源 AI 智能体-意图的进化
  • 从自创生到现象意识的本体论构建
  • 基于Doris的实时数据仓库建设:从理论到实践的完整指南
  • 写真提示词完全指南:从棚拍到情绪大片,AI帮你一键生成
  • 「1+3 架构驱动」OoderAI 企业级解决方案:破解 AI 落地三大痛点,实现能力可控、交互智能与代码一致
  • Gemini认证概述
  • ConcurrentHashMap的并发度是什么?
  • 通信原理篇---连续谱和离散谱
  • 2026,羽绒服不再“围攻波司登”
  • 救命神器!8款AI论文平台测评:本科生毕业论文救星
  • 论文初稿AI率高很正常,教你怎么改到达标
  • 降AI率后论文质量会变差吗?真相是这样的
  • 【Python毕设推荐】基于Hadoop+Spark的健康保险数据可视化分析系统 毕业设计 选题推荐 毕设选题 数据分析
  • 从SOA到微服务:HR智能助手架构演进
  • 研究生论文AI检测不过怎么办?学长经验分享