7. CMake 选项

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 设为 ONBUILD_DOCUMENTATION 设为 ONINSTALL_EXAMPLES 设为 ONONOFFOFF
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 设为 ONONOFFOFF
BUILD_SHARED_LIBS将内部库构建为共享库,即开启此选项后,CMake 函数 add_library() 会创建共享库。除非库被明确添加为静态库,否则所有库均以共享库形式构建。ONOFFON
SECURITY激活 Fast DDS 安全模块。有关安全模块的更多信息,请参考 “Security” 部分。ONOFFOFF
NO_TLS禁用传输层安全(TLS)支持。有关 Fast DDS TLS 配置的更多信息,请参考 “TLS over TCP” 部分。ONOFFOFF
SHM_TRANSPORT_DEFAULT将共享内存传输(SHM)添加到默认传输方式中。有关 Fast DDS SHM 传输的更多信息,请参考 “SHM” 部分。ONOFFON
FASTDDS_STATISTICS启用 Fast DDS 统计模块。有关此模块的更多信息,请参考 “Statistics Module” 部分。ONOFFON
COMPILE_EXAMPLES构建 Fast DDS 示例。若 EPROSIMA_BUILD 设为 ON 且 EPROSIMA_INSTALLER 设为 OFF,则此选项自动设为 ON。这些示例可在 eProsima Fast DDS 的 GitHub 仓库中找到。ONOFFOFF
INSTALL_EXAMPLES安装 Fast DDS 示例,即将 Fast DDS 示例添加到待安装组件列表(CPACK_COMPONENTS_ALL)中。若 EPROSIMA_INSTALLER 设为 ON,则此选项自动设为 ONONOFFOFF
BUILD_DOCUMENTATION使用 Doxygen 生成 Fast DDS API 参考文档。若 EPROSIMA_INSTALLER 设为 ON 或 CHECK_DOCUMENTATION 设为 ON,则此选项自动设为 ONONOFFOFF
CHECK_DOCUMENTATION从 Read the Docs 媒体服务器下载 Fast DDS 文档。文档文件会解压到 doc/manual 目录下,并覆盖之前已下载的旧版本(如有)。若 CHECK_DOCUMENTATION 设为 ON,则 BUILD_DOCUMENTATION 自动设为 ONONOFFOFF
STRICT_REALTIME启用严格的实时行为。有关 Fast DDS 实时配置的更多信息,请参考 “Real-Time Use Case” 部分。ONOFFOFF
SQLITE3_SUPPORT构建 SQLITE3 插件,该插件为 DurabilityQosPolicyKind 启用 TRANSIENT_DURABILITY_QOS 和 PERSISTENT_DURABILITY_QOS 选项,进而支持持久化服务(Persistence Service)。ONOFFON
APPEND_PROJECT_NAME_TO_INCLUDEDIR设为 ON 时,头文件会安装到以 fastdds 文件夹结尾的路径下。在从合并的 catkin、ament 或 colcon 工作空间中覆盖此软件包时,这一设置可避免包含目录搜索顺序问题。ONOFFOFF
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 报告。ONOFFLinux 和 Mac 平台为 OFF,Windows 平台为 ON
SANITIZER为代码添加运行时检测。支持的选项如下:Thread:启用线程 sanitizer;Address:启用地址 sanitizer。AddressThreadOFFOFF

7.2 日志选项

Fast DDS 采用自带的可配置日志模块,该模块支持不同的详细程度级别。有关更多信息,请参考 “Logging” 部分。

可通过 Fast DDS CMake 参数对以下选项进行配置,从而实现对日志模块的设置。

选项说明可选值默认值
LOG_CONSUMER_DEFAULT为日志模块选择默认的日志消费者。AUTO 与 STDOUTERR 行为相同。有关更多信息,请参考 “Log consumers” 部分。AUTOSTDOUTSTDOUTERRAUTO
LOG_NO_INFO禁用 “信息”(Info)级别的日志。若使用单配置生成器(Single-Config generators)以调试模式(debug mode)构建 Fast DDS,此选项的默认值为 OFFONOFFON
FASTDDS_ENFORCE_LOG_INFO即使在非 “调试”(Debug)配置下,也启用 “信息”(Info)级别的日志。仅当 LOG_NO_INFO 设为 OFF 时,此选项才会生效(请参考 “Disable Logging Module” 部分)。需注意,这可能会对性能造成显著影响。ONOFFOFF
LOG_NO_WARNING禁用 “警告”(Warning)级别的日志。ONOFFOFF
LOG_NO_ERROR禁用 “错误”(Error)级别的日志。ONOFFOFF
INTERNAL_DEBUG激活日志消息的编译(请参考 “Disable Logging Module” 部分)。此外,若 EPROSIMA_BUILD 设为 ON,则 INTERNAL_DEBUG 自动设为 ONONOFFOFF
ENABLE_OLD_LOG_MACROS启用旧版日志宏(请参考 “Old Log macros disable” 部分)。ONOFFON

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,则自动将其设为 ONONOFFFORCEOFF
THIRDPARTY_Asio设为 ON 时,若系统其他位置未找到 Asio 库,则启用内部 Asio 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 Asio 库,均强制启用内部 Asio 第三方库;设为 OFF 时,禁用内部 Asio 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ONONOFFFORCEOFF
THIRDPARTY_TinyXML2设为 ON 时,若系统其他位置未找到 TinyXML2 库,则启用内部 TinyXML2 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 TinyXML2 库,均强制启用内部 TinyXML2 第三方库;设为 OFF 时,禁用内部 TinyXML2 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ONONOFFFORCEOFF
THIRDPARTY_android-ifaddrsandroid-ifaddrs 是适用于 Android 系统的 getifaddrs() 函数实现。仅当 ANDROID 设为 1 时才会使用此库。设为 ON 时,若系统其他位置未找到 android-ifaddrs 库,则启用内部 android-ifaddrs 第三方库;设为 FORCE 时,无论系统其他位置是否能找到 android-ifaddrs 库,均强制启用内部 android-ifaddrs 第三方库;设为 OFF 时,禁用内部 android-ifaddrs 第三方库。若此选项未设为 FORCE,且 EPROSIMA_BUILD 设为 ON,则自动将其设为 ONONOFFFORCEOFF
THIRDPARTY在未单独指定的情况下,此选项用于统一设置所有第三方 Git 子模块(THIRDPARTY_fastcdrTHIRDPARTY_AsioTHIRDPARTY_TinyXML2 和 THIRDPARTY_android-ifaddrs)的值。ONOFFFORCEOFF
THIRDPARTY_UPDATE激活所有第三方 Git 子模块的更新。ONOFFON

注: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 通信。ONOFFOFF
FASTDDS_EXAMPLE_TESTS启用示例测试的构建,该测试用于验证 Fast DDS 示例。ONOFFOFF
PERFORMANCE_TESTS激活性能测试的构建,但视频测试除外。视频测试需同时将 PERFORMANCE_TESTS 和 VIDEO_TESTS 设为 ON 才能激活构建。ONOFFOFF
PROFILING_TESTS激活使用 Valgrind 的性能分析测试的构建。ONOFFOFF
EPROSIMA_BUILD_TESTS激活黑盒测试、单元测试、XTypes 测试、RTPS 通信测试和 DDS 通信测试的构建。若 EPROSIMA_BUILD 设为 ON 且 EPROSIMA_INSTALLER 设为 OFF,则此选项自动设为 ONONOFFOFF
VIDEO_TESTS若 PERFORMANCE_TESTS 设为 ON,则此选项会激活视频性能测试的构建。ONOFFOFF
DISABLE_UDPV6_TESTS禁用 UDPv6 测试。ONOFFOFF
INSTALL_ANDROID_TESTS仅适用于 Android 交叉编译。标记测试用例,以便在已连接的设备 / 模拟器上安装。ONOFFOFF
ANDROID_TESTING_ROOT仅适用于 Android 交叉编译。指定在 Android 设备 / 模拟器上用于安装和运行测试用例的路径。有效的 Unix 文件系统路径字符串空字符串(""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值