7. CMake 选项
eProsima Fast DDS 提供了众多 CMake 选项,用于更改 Fast DDS 的行为与配置。用户可在执行 CMake 时,将这些选项定义为 ON/OFF,从而启用或禁用 Fast DDS 的特定设置。本节内容结构如下:首先介绍用于 Fast DDS 常规配置的 CMake 选项;接着呈现与第三方库相关的选项;最后明确用于构建 Fast DDS 测试的可选选项。
7.1 常规选项
以下是用于配置常规设置的 Fast DDS CMake 选项,同时包含选项说明及与其他选项的依赖关系。
| 选项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
EPROSIMA_INSTALLER | 为 Windows 二进制安装程序创建构建文件。具体而言,它会将 Microsoft Visual C++ 编译器(MSVC)对应的库添加到待安装组件列表(CPACK_COMPONENTS_ALL)中。将 EPROSIMA_INSTALLER 设置为 ON 时,会对其他选项产生如下影响:EPROSIMA_BUILD 设为 ON;BUILD_DOCUMENTATION 设为 ON;INSTALL_EXAMPLES 设为 ON。 | ON、OFF | OFF |
EPROSIMA_BUILD | 激活 Fast DDS 内部构建。若 EPROSIMA_INSTALLER 设为 ON,则此选项自动设为 ON。将 EPROSIMA_BUILD 设置为 ON 时,会对其他选项产生如下影响:INTERNAL_DEBUG 设为 ON;若 EPROSIMA_INSTALLER 为 OFF,则 COMPILE_EXAMPLES 设为 ON;若 THIRDPARTY_fastcdr 未设为 FORCE,则将其设为 ON;若 THIRDPARTY_Asio 未设为 FORCE,则将其设为 ON;若 THIRDPARTY_TinyXML2 未设为 FORCE,则将其设为 ON;若 THIRDPARTY_android-ifaddrs 未设为 FORCE,则将其设为 ON;若 EPROSIMA_INSTALLER 为 OFF,则 EPROSIMA_BUILD_TESTS 设为 ON。 | ON、OFF | OFF |
BUILD_SHARED_LIBS | 将内部库构建为共享库,即开启此选项后,CMake 函数 add_library() 会创建共享库。除非库被明确添加为静态库,否则所有库均以共享库形式构建。 | ON、OFF | ON |
SECURITY | 激活 Fast DDS 安全模块。有关安全模块的更多信息,请参考 “Security” 部分。 | ON、OFF | OFF |
NO_TLS | 禁用传输层安全(TLS)支持。有关 Fast DDS TLS 配置的更多信息,请参考 “TLS over TCP” 部分。 | ON、OFF | OFF |
SHM_TRANSPORT_DEFAULT | 将共享内存传输(SHM)添加到默认传输方式中。有关 Fast DDS SHM 传输的更多信息,请参考 “SHM” 部分。 | ON、OFF | ON |
FASTDDS_STATISTICS | 启用 Fast DDS 统计模块。有关此模块的更多信息,请参考 “Statistics Module” 部分。 | ON、OFF | ON |
COMPILE_EXAMPLES | 构建 Fast DDS 示例。若 EPROSIMA_BUILD 设为 ON 且 EPROSIMA_INSTALLER 设为 OFF,则此选项自动设为 ON。这些示例可在 eProsima Fast DDS 的 GitHub 仓库中找到。 | ON、OFF | OFF |
INSTALL_EXAMPLES | 安装 Fast DDS 示例,即将 Fast DDS 示例添加到待安装组件列表(CPACK_COMPONENTS_ALL)中。若 EPROSIMA_INSTALLER 设为 ON,则此选项自动设为 ON。 | ON、OFF | OFF |
BUILD_DOCUMENTATION | 使用 Doxygen 生成 Fast DDS API 参考文档。若 EPROSIMA_INSTALLER 设为 ON 或 CHECK_DOCUMENTATION 设为 ON,则此选项自动设为 ON。 | ON、OFF | OFF |
CHECK_DOCUMENTATION | 从 Read the Docs 媒体服务器下载 Fast DDS 文档。文档文件会解压到 doc/manual 目录下,并覆盖之前已下载的旧版本(如有)。若 CHECK_DOCUMENTATION 设为 ON,则 BUILD_DOCUMENTATION 自动设为 ON。 | ON、OFF | OFF |
STRICT_REALTIME | 启用严格的实时行为。有关 Fast DDS 实时配置的更多信息,请参考 “Real-Time Use Case” 部分。 | ON、OFF | OFF |
SQLITE3_SUPPORT | 构建 SQLITE3 插件,该插件为 DurabilityQosPolicyKind 启用 TRANSIENT_DURABILITY_QOS 和 PERSISTENT_DURABILITY_QOS 选项,进而支持持久化服务(Persistence Service)。 | ON、OFF | ON |
APPEND_PROJECT_NAME_TO_INCLUDEDIR | 设为 ON 时,头文件会安装到以 fastdds 文件夹结尾的路径下。在从合并的 catkin、ament 或 colcon 工作空间中覆盖此软件包时,这一设置可避免包含目录搜索顺序问题。 | ON、OFF | OFF |
USE_THIRDPARTY_SHARED_MUTEX | 设为 ON 时,会使用自定义的 shared_mutex 实现,而非标准模板库(STL)中的实现。C++ 标准(截至 C++20)尚未对 shared_mutex 的优先级策略实现作出规定(POSIX 标准有相关规定),因此不同平台有各自的实现选择:Windows 和 Boost 平台默认使用 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP;Linux 和 Mac 平台默认使用 PTHREAD_RWLOCK_PREFER_READER_NP。Fast-DDS 需要使用 PTHREAD_RWLOCK_PREFER_READER_NP,这是其死锁预防逻辑中强制要求的。Fast-DDS 会检测框架的 STL 实现(若可用),仅当该实现强制使用 PTHREAD_RWLOCK_PREFER_READER_NP 时才会使用它,否则会自动回退到自定义实现。此标志会强制在所有情况下使用自定义实现。需注意,将此标志设为 OFF,并不能阻止在默认使用 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 的框架中使用自定义实现。此标志可防止 GCC/Clang STL 实现中出现虚假的线程 sanitizer 报告。 | ON、OFF | Linux 和 Mac 平台为 OFF,Windows 平台为 ON |
SANITIZER | 为代码添加运行时检测。支持的选项如下:Thread:启用线程 sanitizer;Address:启用地址 sanitizer。 | Address、Thread、OFF | OFF |
7.2 日志选项
Fast DDS 采用自带的可配置日志模块,该模块支持不同的详细程度级别。有关更多信息,请参考 “Logging” 部分。
可通过 Fast DDS CMake 参数对以下选项进行配置,从而实现对日志模块的设置。
| 选项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
LOG_CONSUMER_DEFAULT | 为日志模块选择默认的日志消费者。AUTO 与 STDOUTERR 行为相同。有关更多信息,请参考 “Log consumers” 部分。 | AUTO、STDOUT、STDOUTERR | AUTO |
LOG_NO_INFO | 禁用 “信息”(Info)级别的日志。若使用单配置生成器(Single-Config generators)以调试模式(debug mode)构建 Fast DDS,此选项的默认值为 OFF。 | ON、OFF | ON |
FASTDDS_ENFORCE_LOG_INFO | 即使在非 “调试”(Debug)配置下,也启用 “信息”(Info)级别的日志。仅当 LOG_NO_INFO 设为 OFF 时,此选项才会生效(请参考 “Disable Logging Module” 部分)。需注意,这可能会对性能造成显著影响。 | ON、OFF | OFF |
LOG_NO_WARNING | 禁用 “警告”(Warning)级别的日志。 | ON、OFF | OFF |
LOG_NO_ERROR | 禁用 “错误”(Error)级别的日志。 | ON、OFF | OFF |
INTERNAL_DEBUG | 激活日志消息的编译(请参考 “Disable Logging Module” 部分)。此外,若 EPROSIMA_BUILD 设为 ON,则 INTERNAL_DEBUG 自动设为 ON。 | ON、OFF | OFF |
ENABLE_OLD_LOG_MACROS | 启用旧版日志宏(请参考 “Old Log macros disable” 部分)。 | ON、OFF | ON |
7.3 第三方库选项
Fast DDS 的序列化机制依赖于 eProsima FastCDR 库。此外,Fast DDS 的正常运行还需要两个外部依赖库:Asio 和 TinyXML2。其中,Asio 是一款跨平台的 C++ 网络与底层 I/O 编程库,TinyXML2 则用于解析 XML 配置文件,以便 Fast DDS 能够使用这些配置(请参考 “XML profiles” 部分)。
这三个库(eProsima FastCDR、Asio 和 TinyXML2)既可以由用户自行安装,也可以在构建 Fast DDS 时自动下载。若选择自动下载,这些库被称为 Fast DDS 的 “内部第三方库”,只需将 THIRDPARTY 或 EPROSIMA_BUILD 设为 ON 即可实现自动下载。
也可通过 Fast DDS CMake 选项对这些库进行配置。
| 选项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
THIRDPARTY_fastcdr | 设为 ON 时,若系统其他位置未找到 Fast CDR 库,则启用内部 Fast CDR 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 Fast CDR 库,均强制启用内部 Fast CDR 第三方库;设为 OFF 时,禁用内部 Fast CDR 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ON。 | ON、OFF、FORCE | OFF |
THIRDPARTY_Asio | 设为 ON 时,若系统其他位置未找到 Asio 库,则启用内部 Asio 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 Asio 库,均强制启用内部 Asio 第三方库;设为 OFF 时,禁用内部 Asio 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ON。 | ON、OFF、FORCE | OFF |
THIRDPARTY_TinyXML2 | 设为 ON 时,若系统其他位置未找到 TinyXML2 库,则启用内部 TinyXML2 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 TinyXML2 库,均强制启用内部 TinyXML2 第三方库;设为 OFF 时,禁用内部 TinyXML2 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ON。 | ON、OFF、FORCE | OFF |
THIRDPARTY_android-ifaddrs | android-ifaddrs 是适用于 Android 系统的 getifaddrs() 函数实现。仅当 ANDROID 设为 1 时才会使用此库。设为 ON 时,若系统其他位置未找到 android-ifaddrs 库,则启用内部 android-ifaddrs 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 android-ifaddrs 库,均强制启用内部 android-ifaddrs 第三方库;设为 OFF 时,禁用内部 android-ifaddrs 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ON。 | ON、OFF、FORCE | OFF |
THIRDPARTY | 在未单独指定的情况下,此选项用于统一设置所有第三方 Git 子模块(THIRDPARTY_fastcdr、THIRDPARTY_Asio、THIRDPARTY_TinyXML2 和 THIRDPARTY_android-ifaddrs)的值。 | ON、OFF、FORCE | OFF |
THIRDPARTY_UPDATE | 激活所有第三方 Git 子模块的更新。 | ON、OFF | ON |
注:
ANDROID是一个 CMake 环境变量。若目标系统(CMAKE_SYSTEM_NAME)为 Android,则该变量设为1。
7.4 测试选项
eProsima Fast DDS 提供了一套完整的测试用例,用于持续集成,包括单元测试、黑盒测试、性能测试、性能分析测试和 XTypes 测试。可通过下表中的 Fast DDS CMake 选项,指定这些测试的构建与执行。
| 选项 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
FASTDDS_PIM_API_TESTS | 启用黑盒测试的构建,该测试用于验证基于 Fast DDS DDS 层 API 的 DDS 通信。 | ON、OFF | OFF |
FASTDDS_EXAMPLE_TESTS | 启用示例测试的构建,该测试用于验证 Fast DDS 示例。 | ON、OFF | OFF |
PERFORMANCE_TESTS | 激活性能测试的构建,但视频测试除外。视频测试需同时将 PERFORMANCE_TESTS 和 VIDEO_TESTS 设为 ON 才能激活构建。 | ON、OFF | OFF |
PROFILING_TESTS | 激活使用 Valgrind 的性能分析测试的构建。 | ON、OFF | OFF |
EPROSIMA_BUILD_TESTS | 激活黑盒测试、单元测试、XTypes 测试、RTPS 通信测试和 DDS 通信测试的构建。若 EPROSIMA_BUILD 设为 ON 且 EPROSIMA_INSTALLER 设为 OFF,则此选项自动设为 ON。 | ON、OFF | OFF |
VIDEO_TESTS | 若 PERFORMANCE_TESTS 设为 ON,则此选项会激活视频性能测试的构建。 | ON、OFF | OFF |
DISABLE_UDPV6_TESTS | 禁用 UDPv6 测试。 | ON、OFF | OFF |
INSTALL_ANDROID_TESTS | 仅适用于 Android 交叉编译。标记测试用例,以便在已连接的设备 / 模拟器上安装。 | ON、OFF | OFF |
ANDROID_TESTING_ROOT | 仅适用于 Android 交叉编译。指定在 Android 设备 / 模拟器上用于安装和运行测试用例的路径。 | 有效的 Unix 文件系统路径字符串 | 空字符串("") |
8059

被折叠的 条评论
为什么被折叠?



