1. 概述
Eclipse Cyclone DDS 使用 CMake 作为构建系统。除了标准的 CMAKE_BUILD_TYPE 等选项外,项目提供了一系列特定的 -D 标志,用于控制功能模块的编译、依赖项的查找以及特定 QoS 策略的支持。合理配置这些选项可以优化二进制文件的大小、适应特定的运行环境(如嵌入式系统)或满足安全合规要求。
2. 构建目标与工具配置
以下选项控制示例程序、测试套件及辅助工具的构建。
| 配置选项 | 详细解释 |
|---|---|
| -DBUILD_EXAMPLES=ON | 构建包含的示例程序。适用于学习 API 用法或验证安装。 |
| -DBUILD_TESTING=ON | 构建测试套件。 注意:启用此选项将强制从库中导出所有符号(export all symbols),可能会增加二进制文件大小并影响链接行为。 |
| -DBUILD_IDLC=NO | 禁用构建 IDL 编译器 (idlc)。 影响:若禁用,将无法编译新的 IDL 文件,进而导致依赖 IDL 编译的示例、测试及 ddsperf 工具无法构建。 |
| -DBUILD_DDSPERF=NO | 禁用构建 ddsperf 性能测量工具。该工具用于基准测试和性能分析。 |
| -DBUILD_IDLC_XTESTS=NO | 包含针对 IDL 编译器的额外测试集。 机制:在运行时使用 C 后端动态编译 IDL 文件,并构建测试应用程序。 限制:不支持 Windows 平台。 |
3. 外部依赖与核心功能
以下选项控制对第三方库(如 OpenSSL, Iceoryx)的查找及相关核心功能的启用。
3.1 安全与加密 (OpenSSL)
| 配置选项 | 说明 |
|---|---|
| -DENABLE_SSL=NO | 禁用 OpenSSL 支持。 1. 停止查找 OpenSSL 库。 2. 移除 TLS/TCP 传输支持。 3. 不构建实现身份验证和数据加密的安全插件。 默认值: AUTO(若检测到 OpenSSL 则自动启用)。 |
| -DENABLE_SECURITY=NO | 禁用安全接口。 1. 不在核心代码中构建安全接口和钩子。 2. 不构建相关安全插件。 注意:即使未启用 SSL ( ENABLE_SSL=NO),理论上仍可启用此选项以加载第三方安全插件,但通常需配合使用。 |
3.2 高性能共享内存 (Iceoryx)
| 配置选项 | 说明 |
|---|---|
| -DENABLE_ICEORYX=NO | 禁用共享内存传输。 1. 停止查找 Eclipse Iceoryx 库。 2. 禁用同机进程间的零拷贝共享内存通信机制。 默认值: AUTO(若检测到 Iceoryx 则自动启用)。 |
4. QoS 策略与协议特性裁剪
对于资源受限的嵌入式环境,可以通过禁用特定的 QoS 策略或协议特性来减小代码体积。
| 配置选项 | 功能描述 | 依赖/关联限制 |
|---|---|---|
| -DENABLE_LIFESPAN=NO | 排除对 Lifespan QoS(数据有效期)的支持。 | 无 |
| -DENABLE_DEADLINE_MISSED=NO | 排除对 Deadline QoS(截止期限)的支持。 | 无 |
| -DENABLE_TYPELIB=NO | 排除对类型库的支持。 | 必须同时设置: -DENABLE_TYPE_DISCOVERY=NO -DENABLE_TOPIC_DISCOVERY=NO |
| -DENABLE_TYPE_DISCOVERY=NO | 排除类型发现及类型兼容性检查(涵盖大部分 XTypes 功能)。 | 必须同时设置: -DENABLE_TOPIC_DISCOVERY=NO |
| -DENABLE_TOPIC_DISCOVERY=NO | 排除主题发现支持。 | 无独立强依赖,但常被上述选项联动禁用。 |
| -DENABLE_SOURCE_SPECIFIC_MULTICAST=NO | 禁用源特定多播 (SSM) 支持。 | QNX 平台建议:可能需要同时禁用 IPv6 (-DENABLE_IPV6=NO)。 |
| -DENABLE_IPV6=NO | 禁用 IPv6 协议支持。 | QNX 平台建议:可能需要同时禁用 SSM (-DENABLE_SOURCE_SPECIFIC_MULTICAST=NO)。 |
5. 配置组合建议
5.1 最小化嵌入式构建
若需在资源极度受限的设备上运行,且仅需基本的发布/订阅功能:
bash
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTING=OFF \
-DBUILD_DDSPERF=OFF \
-DENABLE_SSL=NO \
-DENABLE_ICEORYX=NO \
-DENABLE_SECURITY=NO \
-DENABLE_LIFESPAN=NO \
-DENABLE_DEADLINE_MISSED=NO \
-DENABLE_TYPE_DISCOVERY=NO \
-DENABLE_TOPIC_DISCOVERY=NO \
-DENABLE_IPV6=NO 5.2 安全增强构建
若需完整的安全特性(认证、加密、访问控制):
bash
cmake -B build \
-DENABLE_SSL=ON \
-DENABLE_SECURITY=ON \
-DBUILD_TESTING=ON 前提:系统已安装 OpenSSL 开发库。
5.3 高性能同机通信构建
若主要应用场景为单节点内多进程通信:
bash
cmake -B build \
-DENABLE_ICEORYX=ON \
-DBUILD_EXAMPLES=ON 前提:系统已安装 Eclipse Iceoryx 库。
6. 注意事项
- 依赖连锁反应:禁用
BUILD_IDLC会导致无法生成代码,从而使依赖生成代码的BUILD_EXAMPLES、BUILD_TESTING和BUILD_DDSPERF失败。通常建议保留 IDLC 或手动预生成代码。 - 类型系统完整性:禁用类型发现 (
ENABLE_TYPE_DISCOVERY) 会严重影响动态类型处理能力,若应用依赖 XTypes 特性,请勿禁用此项。 - 平台特异性:在 QNX 等实时操作系统上构建时,网络协议栈的实现可能要求同时禁用 IPv6 和源特定多播,需参考具体平台的构建文档。