OpenDDS是否支持类似RTI rtiddsgen的发布订阅代码生成及构建报错排查
OpenDDS 代码生成能力说明
- OpenDDS 没有与 RTI
rtiddsgen完全对等的内置工具,无法仅通过IDL文件一键生成可直接编译运行的发布者、订阅者业务框架代码 - OpenDDS 基于IDL的自动化处理仅覆盖底层绑定层:通过CMake提供的
OPENDDS_TARGET_SOURCES指令,构建流程会自动调用opendds_idl编译器处理IDL定义,生成序列化逻辑、类型支持、DataReader/DataWriter关联的基础类文件,这部分流程完全自动,不需要手动执行额外的生成命令 - 你之前查阅的封装层生成相关资料,属于基于IDL做二次业务封装的开发指引,并非自动生成业务可执行代码的操作说明
- 两者的核心设计差异:RTI的
rtiddsgen可以直接生成带示例业务逻辑的Publisher.cpp、Subscriber.cpp、监听者实现文件,生成后开箱即可编译运行;OpenDDS不会自动生成这类业务层可执行代码,需要开发者参照官方示例自行编写
当前 CMake 报错的根因与修复方案
- 全部报错的核心原因:你在CMakeLists.txt中显式声明需要参与编译的
Publisher.cpp、Subscriber.cpp、DataReaderListenerImpl.cpp文件,在当前项目目录下不存在,和IDL编译环节没有关系 - OpenDDS 不存在“仅靠单个IDL文件自动生成完整可执行程序”的构建链路,仅放置
Messenger.idl无法支撑完整的项目构建 - 修复操作步骤:
- 从OpenDDS官方Messenger示例项目中,将上述三个缺失的业务源码文件复制到你的项目根目录,这些文件是手写的业务逻辑代码,不属于IDL自动生成的产物范畴
- 保留你当前CMakeLists.txt中的
OPENDDS_TARGET_SOURCES配置即可,该指令已经正确配置了IDL的自动编译流程,不需要额外修改IDL处理逻辑
注意:IDL自动生成的所有绑定类文件都是编译过程中的中间产物,会在构建输出目录下自动生成,不会出现在你的源码工作目录中,其作用是为手写的业务代码提供类型支撑,不能替代业务层的可执行代码
内容的提问来源于stack exchange,提问作者rosiepati
相关产品推荐
相关产品推荐

