Using OpenDDS in a CMake Project

OpenDDS can be used with CMake-based projects by using the OpenDDS CMake config package. This package bridges the gap between the MPC build system used by OpenDDS and CMake-based projects by providing imported library targets and the ability to add IDL to a target using opendds_target_sources.

Requirements

CMake version 3.3.2 or greater is required to use the CMake package, but some some features require newer versions.

Using the OpenDDS CMake Package

Examples

Developer’s Guide Messenger Example

For a simple quick-start example of a CMakeLists.txt using OpenDDS with CMake see the Developer’s Guide Messenger example. The following instructions show how to configure and build it:

Make sure the environment is setup by using source setenv.sh.

cd DevGuideExamples/DCPS/Messenger
mkdir build
cd build
cmake ..
cmake --build .
perl run_test.pl

Make sure the environment is setup by using call setenv.cmd.

cd DevGuideExamples\DCPS\Messenger
mkdir build
cd build
cmake ..
cmake --build .
perl run_test.pl
Example Using Installed OpenDDS (Unix only)

The --prefix switch can be passed to configure to enable the install target, which will install OpenDDS (including the OpenDDS CMake config package) into the specified directory. See Installation for details.

Note

Be sure to pass an absolute path to --prefix.

OPENDDS_PREFIX="$PWD/opendds-install"
DDS_ROOT="$PWD/OpenDDS"
ACE_ROOT="$DDS_ROOT/ACE_wrappers"
cd OpenDDS
./configure --prefix="$OPENDDS_PREFIX"
make -j $(getconf _NPROCESSORS_ONLN)
make install
cd DevGuideExamples/DCPS/Messenger
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH="$OPENDDS_PREFIX" ..
cmake --build .
PERL5LIB="$DDS_ROOT/bin:$ACE_ROOT/bin" LD_LIBRARY_PATH="$OPENDDS_PREFIX/lib:$LD_LIBRARY_PATH" perl run_test.pl

Other Examples

The CMake tests are written primarily as tests, but can also be used as examples for specific features and approaches.

find_package

To use the OpenDDS CMake package, first it has to be loaded using find_package. For example to mandatorily load OpenDDS:

find_package(OpenDDS REQUIRED)

For this to work, CMake has to be able to find the package. If the OpenDDS build environment variables (from source setenv.sh or call setenv.cmd) are set then CMake should be able to find it using the PATH environment variable. If those environment variables aren’t set, OpenDDS was installed to a path CMake doesn’t search automatically, or CMake can’t otherwise find the OpenDDS package, then CMake has to be told about it explicitly somehow. This can be done a number of ways, which includes adding the OpenDDS source tree or install prefix path to CMAKE_PREFIX_PATH or setting OPENDDS_ROOT to that path (if using CMake 3.12 or later).

Consult the find_package documentation for your CMake version for all the details on how CMake could find OpenDDS. Here is the documentation for the latest version of CMake

Components

Added in version 3.25.

By default the package will search for all libraries and executables, but only require the bare minimum for ACE/TAO and OpenDDS. Arguments can be passed to find_package(OpenDDS COMPONENTS <argument>...) (or alternatively find_package(OpenDDS REQUIRED [COMPONENTS] <argument>...)) add to what’s required. These can be:

  • Executables and Libraries

    Example:

    find_package(OpenDDS REQUIRED OpenDDS::Rtps_Udp OpenDDS::RtpsRelay)
    
  • Features

    Feature names should be the same as the variable, but without the leading OPENDDS_ and all lowercase. Feature names by themselves will be required to be enabled. If using CMake 3.9 or higher and the name is followed by =, then the CMake boolean value following that determines if the feature must be enabled or disabled.

    Example:

    find_package(OpenDDS REQUIRED built_in_topics safety_profile=OFF)
    

    Note

    Passing features to OPTIONAL_COMPONENTS is treated as an error. It doesn’t make sense to optionally request them because they are fixed.

  • NO_DEFAULTS

    Passing NO_DEFAULTS will only search for and require what is specified. This allows using ACE/TAO without OpenDDS being built, assuming the package is configured correctly. It also allows OPTIONAL_COMPONENTS to have an effect because normally everything is treated as optional.

    Example:

    find_package(OpenDDS REQUIRED NO_DEFAULTS ACE::ACE OPTIONAL_COMPONENTS TAO::TAO)
    

    This just makes ACE::ACE and optionally TAO::TAO available. Normally ACE::ACE, TAO::TAO, and OpenDDS::Dcps are unconditionally searched for and required.

Adding IDL Sources with opendds_target_sources

The CMake config package provides an easy way to add IDL sources to CMake targets using opendds_target_sources. Here is how it’s used in the Developer’s Guide Messenger example:

# IDL TypeSupport Library
add_library(messenger_idl)
opendds_target_sources(messenger_idl PUBLIC "Messenger.idl")
target_link_libraries(messenger_idl PUBLIC OpenDDS::Dcps)

Here the IDL is added to a library that is shared by the executables, but opendds_target_sources can also be used on executables directly.

Note

CMake version 3.10 and below will issue a harmless warning if add_library is called without any sources.

See opendds_target_sources for all the options it accepts.

Linking OpenDDS Libraries

In addition to C++ types generated from IDL and their type support, OpenDDS applications need discovery and transport to talk to each other. target_link_libraries should be used with all the libraries needed. Here is the usage in the Developer’s Guide Messenger example:

set(opendds_libs
  OpenDDS::Dcps # Core OpenDDS Library
  OpenDDS::InfoRepoDiscovery OpenDDS::Tcp # For run_test.pl
  OpenDDS::Rtps OpenDDS::Rtps_Udp # For run_test.pl --rtps
  messenger_idl
)

# Publisher
add_executable(publisher
  Publisher.cpp
)
target_link_libraries(publisher ${opendds_libs})

# Subscriber
add_executable(subscriber
  Subscriber.cpp
  DataReaderListenerImpl.cpp
)
target_link_libraries(subscriber ${opendds_libs})

See Libraries for all the libraries the CMake package can provide.

install(IMPORTED_RUNTIME_ARTIFACTS)

Added in version 3.20.

If using CMake 3.21 or later, it’s possible to install executables and shared libraries from OpenDDS, ACE, and TAO in CMake along side the application using install(IMPORTED_RUNTIME_ARTIFACTS). This will just install shared libraries and executables, not static libraries, headers, or anything else required for building applications.

If OpenDDS and ACE/TAO is built with clang, the shared libraries might be missing an SONAME entry. It is an issue with ACE/TAO. If trying to use install(IMPORTED_RUNTIME_ARTIFACTS) in this case, it causes the dynamic linker to ignore the libraries and report that they could not be found. One workaround is to add SOFLAGS+=-Wl,-h,$(SONAME) to $ACE_ROOT/include/makeinclude/platform_macros.GNU before building. This can be done manually after running the configure script or by passing --macros=SOFLAGS+=-Wl,-h,\$\(SONAME\) to the configure script.

opendds_get_library_dependencies is provided to help find out what libraries need to be installed.

See the install Test for an example of using this.

Changed in version 3.25: There are now executables that can be installed.

Installing Generated Interface Files

Added in version 3.20.

It is possible to install files from the OPENDDS_*_INTERFACE_FILES target properties for downstream projects to use. See the install Test for an example of this. It uses install(FILES), but there isn’t any restriction on what installation method can be used. For example, the PUBLIC_HEADER target property could be set on target to the desired files from the interface lists. Then they could be installed using install(TARGETS … PUBLIC_HEADER …). Another method is provided by opendds_install_interface_files.

Manually Creating config.cmake

The configure script is responsible for generating the config.cmake file in cmake, which has various configuration options. These options provide the OpenDDS CMake package with the required context it needs to integrate with the OpenDDS code generators and libraries.

If you are using OpenDDS libraries that were built without the help of the configure script, the config.cmake file needs to be created manually. See Config Variables for all the possible values to set.

Reference

Targets

Libraries

The CMake package can provide library targets that can be linked using target_link_libraries or installed using install(IMPORTED_RUNTIME_ARTIFACTS).

OpenDDS::Dcps

Required, the core OpenDDS Library

OpenDDS::Rtps

RTPS Discovery

OpenDDS::InfoRepoDiscovery

InfoRepo Discovery

OpenDDS::Rtps_Udp

RTPS/UDP Transport

OpenDDS::Multicast

Multicast Transport

OpenDDS::Shmem

Shared Memory Transport

OpenDDS::Tcp

TCP Transport

OpenDDS::Udp

UDP Transport

OpenDDS::Security

DDS Security

OpenDDS::RtpsRelayLib

Support library for OpenDDS::RtpsRelay.

Added in version 3.25.

ACE::ACE

Required

ACE::XML_Utils
TAO::TAO

Required

TAO::IDL_FE
TAO::AnyTypeCode
TAO::BiDirGIOP
TAO::CodecFactory
TAO::IORManip
TAO::IORTable
TAO::ImR_Client
TAO::PI
TAO::PortableServer
TAO::Svc_Utils
TAO::Valuetype

Executables

Added in version 3.25.

The CMake package can provide executable targets that can be called manually from CMake or installed using install(IMPORTED_RUNTIME_ARTIFACTS).

ACE::ace_gperf

Required

TAO::tao_idl

Required, tao_idl

OpenDDS::opendds_idl

Required, opendds_idl

OpenDDS::DCPSInfoRepo

The DCPS Information Repository

OpenDDS::RtpsRelay

The RtpsRelay

OpenDDS::dcpsinfo_dump

Utility for The DCPS Information Repository

OpenDDS::inspect

tools/inspect/README.rst

OpenDDS::repoctl

Utility for The DCPS Information Repository

Functions

opendds_target_sources
opendds_target_sources(<target>
  [<idl-file>...]
  [PRIVATE|PUBLIC|INTERFACE <idl-file>...]
  [TAO_IDL_OPTIONS <option>...]
  [OPENDDS_IDL_OPTIONS <option>...]
  [SUPPRESS_ANYS TRUE|FALSE]
  [ALWAYS_GENERATE_LIB_EXPORT_HEADER TRUE|FALSE]
  [USE_EXPORT <export-header>;<export-macro>]
  [USE_VERSIONED_NAMESPACE <vns-header>;<vns-prefix>]
  [GENERATE_SERVER_SKELETONS TRUE|FALSE]
  [AUTO_LINK TRUE|FALSE]
  [INCLUDE_BASE <dir>]
  [SKIP_TAO_IDL]
  [SKIP_OPENDDS_IDL]
)

A function that acts like target_sources, but it adds IDL files and the resulting generated code to a target.

<idl file>... are IDL files that can be absolute or relative to CMAKE_CURRENT_SOURCE_DIR. Each one will generate code using tao_idl and opendds_idl that is added to the target. The optional scope-qualifier (PRIVATE, PUBLIC, INTERFACE) sets the scope of the generated files. When it is omitted, OPENDDS_DEFAULT_SCOPE is used.

Deprecated since version 3.15: C/C++ files can also be passed along with IDL files, but this has been deprecated.

TAO_IDL_OPTIONS <option>...

Pass options to tao_idl. Valid options can be found here

OPENDDS_IDL_OPTIONS <option>...

Pass options to opendds_idl. Add OPENDDS_IDL_OPTIONS -Lc++11 to use the C++11 IDL Mapping.

SUPPRESS_ANYS TRUE|FALSE

If FALSE, TAO TypeCode for any will be generated. The default is set by OPENDDS_SUPPRESS_ANYS.

Added in version 3.17.

ALWAYS_GENERATE_LIB_EXPORT_HEADER TRUE|FALSE

If TRUE, a header for exporting symbols in a shared library will be always generated as long the target is some sort of library. If FALSE, then it will only be done if the target is a shared library. The default is set by OPENDDS_ALWAYS_GENERATE_LIB_EXPORT_HEADER.

Added in version 3.20.

EXPORT_HEADER_DIR <header-dir>

Where the export header is placed relative to the other generated files. The value is passed to opendds_export_header(DIR).

Added in version 3.28.

USE_EXPORT <export-header>;<export-macro>

Pass a CMake list (;-delimited) of an existing export header and export macro to use in the generated code. This is the same format as opendds_export_header(USE_EXPORT_VAR), but is intended for use with a custom export header. If there are multiple calls to opendds_target_sources on the same target, only the first USE_EXPORT is used.

Added in version 3.25.

USE_VERSIONED_NAMESPACE <version-ns-header>;<version-ns-prefix>

Pass a CMake list (;-delimited) of an existing versioned namespace header and prefix to use in the generated code.

Added in version 3.26.

GENERATE_SERVER_SKELETONS TRUE|FALSE

tao_idl generate code for CORBA servers. The default is FALSE. tao_idl by itself does this by default, but by default opendds_target_sources passes -SS to suppress this as it’s not normally useful to an OpenDDS application.

Added in version 3.25.

Automatically link OpenDDS::Dcps or other dependencies to the target using the “max” scope. If FALSE then dependencies will have to be linked manually. The default is set by OPENDDS_AUTO_LINK_DCPS.

Added in version 3.25.

INCLUDE_BASE <dir>

Recreates the directory structure of all the passed IDLs relative to the passed base directory in the generated files. This allows using IDL files from multiple directories. opendds_install_interface_files is proved to help install generated files that result from this. Any IDL file passed that’s outside the include base will cause an error.

The default behavior is the legacy behavior that assumes a flat hierarchy. Starting with OpenDDS 4.0 this will always be enabled and will default to CMAKE_CURRENT_SOURCE_DIR.

Added in version 3.26.

SKIP_TAO_IDL

Skip invoking tao_idl on the IDL files that are passed in. This will still run tao_idl on *TypeSupport.idl files unless SKIP_OPENDDS_IDL is passed in or -SI is passed to opendds_target_sources(OPENDDS_IDL_OPTIONS).

Added in version 3.25.

SKIP_OPENDDS_IDL

Skip invoking opendds_idl on the IDL files.

Added in version 3.25.

After opendds_target_sources is run on a target, it will have these target properties set on it:

OPENDDS_LANGUAGE_MAPPINGS

This holds the IDL language mappings used in the target based on what is passed to opendds_target_sources(OPENDDS_IDL_OPTIONS).

It will be a list that can contain one or more of the following:

  • "C++03"

    • IDL-to-C++ mapping generated by default.

  • "C++11"

    • IDL-to-C++11 mapping available when passing -Lc++11.

  • "FACE"

    • Will appear if -Lface is passed.

  • "Java"

    • Currently unsupported.

If the CMake version is at least 3.12, then this property will be exported with the target.

Added in version 3.15.

OPENDDS_GENERATED_DIRECTORY

The is the directory where generated files have been placed. This is an absolute path and is not exported with the target. See Installing Generated Interface Files for more information.

Added in version 3.20.

The following OPENDDS_*_INTERFACE_FILES target properties are used to help with Installing Generated Interface Files. Some notes about these properties:

  • All paths are absolute.

  • All the generated files will be somewhere within the path from the OPENDDS_GENERATED_DIRECTORY target property of the target.

  • All the properties have the INTERFACE in their name, but this includes PUBLIC scoped files as PUBLIC implies INTERFACE in CMake. PRIVATE scoped files are excluded from these lists as they shouldn’t have a use outside the target.

  • These properties are not exported with the target because the paths may not be valid any more if the build directory has been removed or the export is being used on another machine.

OPENDDS_PASSED_IDL_INTERFACE_FILES

The PUBLIC and INTERFACE scoped IDL files passed.

Added in version 3.20.

OPENDDS_GENERATED_IDL_INTERFACE_FILES

The IDL files generated from the IDL files in OPENDDS_PASSED_IDL_INTERFACE_FILES.

Added in version 3.20.

OPENDDS_ALL_IDL_INTERFACE_FILES

Combination of OPENDDS_PASSED_IDL_INTERFACE_FILES and OPENDDS_GENERATED_IDL_INTERFACE_FILES.

OPENDDS_GENERATED_HEADER_FILES

The .h and .inl files generated from OPENDDS_ALL_IDL_INTERFACE_FILES.

Added in version 3.20.

OPENDDS_ALL_GENERATED_INTERFACE_FILES

Combination of OPENDDS_GENERATED_IDL_INTERFACE_FILES and OPENDDS_GENERATED_HEADER_FILES.

Added in version 3.20.

OPENDDS_ALL_INTERFACE_FILES

All the INTERFACE and PUBLIC scoped files that were passed in or generated.

Added in version 3.20.

Changed in version 3.25: OPENDDS_TARGET_SOURCES is now called opendds_target_sources, but this shouldn’t affect anything because functions and macros are case-insensitive in CMake.

opendds_get_library_dependencies
opendds_get_library_dependencies(<output-list-var-name> <target>...)

If given targets provided by the CMake package, it will return a list of the targets along with their ACE, TAO, and OpenDDS dependencies. This is provided to help use install(IMPORTED_RUNTIME_ARTIFACTS).

Added in version 3.20.

opendds_export_header
opendds_export_header(<target>
  [USE_EXPORT_VAR <use-export-var-name>]
  [DIR <dir-path>]
)

Generates a header that is compatible with ACE’s generate_export_file.pl for exporting symbols in shared libraries. The header will able to be included as <target>_export.h and the macro that can be used to export symbols will be named <target>_Export. It is the same function opendds_target_sources uses so all the same info about generated files applies.

USE_EXPORT_VAR <use-export-var-name>

Set a variable with the given name that contains a list with the location of the generated export header and the macro name to export a symbol. These values could be passed to opendds_target_sources(USE_EXPORT), but this shouldn’t be necessary because these values are saved on the target on the first call of opendds_target_sources or opendds_export_header.

DIR <dir-path>

Where the export header is placed relative to the other generated files. By default the generated export header is put in the root of the include base. See opendds_target_sources(EXPORT_HEADER_DIR) for how to pass this argument from there.

Added in version 3.28: to replace the broken and undocumented INCLUDE_BASE argument.

Added in version 3.25.

opendds_install_interface_files
opendds_install_interface_files(<target>
  [DEST <dir>]
  [INCLUDE_BASE <dir>]
  [EXTRA_GENERATED_FILES <file>...]
)

A helper function that installs the files from the OPENDDS_*_INTERFACE_FILES target properties of the given target and is meant to be used with opendds_target_sources(INCLUDE_BASE). The install path of a file idl_file could be described as DEST/relative(idl_file,INCLUDE_BASE)/idl_file.

DEST <dir>

The base directory to install them to. By default this is CMAKE_INSTALL_INCLUDEDIR.

INCLUDE_BASE <dir>

The source directory relative to the source IDL files to define the directory structure of the installed files. This should probably be the same as opendds_target_sources(INCLUDE_BASE). By default this is CMAKE_CURRENT_SOURCE_DIR.

EXTRA_GENERATED_FILES <file>...

Extra custom files that are in OPENDDS_GENERATED_DIRECTORY to install using the same method.

Added in version 3.26.

Variables

Package Options

These variables can be used to override default behavior of the CMake package.

Warning

Except for OPENDDS_CMAKE_VERBOSE, do not set these when building OpenDDS using CMake. All the others will either have no effect or break the build.

OPENDDS_CMAKE_VERBOSE

If TRUE, then log detailed status information at configure-time. The default for this is FALSE.

Added in version 3.25: The variable can also contain a list of categories to log more verbosely:

all

Enables all logging

components

Logs what components were passed and the exact list of libraries are being searched for and required.

imports

Logs the paths of executables and libraries that are going to be imported.

opendds_target_sources

Logs the arguments of opendds_target_sources and what files will be generated.

OPENDDS_DEFAULT_NESTED

If TRUE, then topic types must be declared explicitly using annotations. The default for this is TRUE.

This can also be controlled on a finer level by passing --default-nested or --no-default-nested to opendds_target_sources(OPENDDS_IDL_OPTIONS). For example:

add_library(messenger)
opendds_target_sources(messenger
  PUBLIC
    Messenger.idl
    OPENDDS_IDL_OPTIONS --no-default-nested
)
OPENDDS_FILENAME_ONLY_INCLUDES

Setting this to TRUE tells opendds_idl to strip path information from #include lines in generated files. Turning the option on can make it easier to specify build rules for IDL files that include other IDL files. The default for this is FALSE.

Added in version 3.15.

Deprecated since version 3.26: opendds_target_sources(INCLUDE_BASE) is a better way to handle IDL in multiple nested directories.

OPENDDS_SUPPRESS_ANYS

Default value for opendds_target_sources(SUPPRESS_ANYS). The default for this is TRUE.

Added in version 3.17.

OPENDDS_ALWAYS_GENERATE_LIB_EXPORT_HEADER

Default value for opendds_target_sources(ALWAYS_GENERATE_LIB_EXPORT_HEADER). The default for this is FALSE.

Added in version 3.20.

OPENDDS_DEFAULT_SCOPE

Default scope of unscoped files in opendds_target_sources. It must be PRIVATE, PUBLIC, or INTERFACE. The default for this is PRIVATE.

Added in version 3.20.

Default value for opendds_target_sources(AUTO_LINK). The default for this is FALSE.

Note

This is off by default because it’s not compatible with any existing usage of target_link_libraries that doesn’t specify a scope. The default for this will be TRUE starting in OpenDDS 4.0.

Added in version 3.24.

OPENDDS_USE_CORRECT_INCLUDE_SCOPE

If TRUE, then include directories of generated files using the “max” scope specified in opendds_target_sources. The default for this is FALSE, which always includes them using the PUBLIC scope.

Note

This is off by default because it could cause “Cannot find source file” errors on TypeSupport.idl files generated in a another directory. This will be fixed in OpenDDS 4.0 by requiring at least CMake 3.20 to get CMP0118. This variable will be removed in OpenDDS 4.0 and the behavior will be the same as if this variable was set to TRUE.

Added in version 3.24.

Config Variables

These variables are set by the configure script in an MPC-built OpenDDS and normally shouldn’t be changed. They can be changed when configuring a CMake-built OpenDDS using -D, but should not be changed after that.

Dependencies
OPENDDS_ACE

Path to ACE, usually ACE_ROOT

OPENDDS_ACE_VERSION

The version of ACE being used.

Added in version 3.27.

OPENDDS_TAO

Path to TAO, usually TAO_ROOT

OPENDDS_TAO_VERSION

The version of TAO being used.

Added in version 3.27.

OPENDDS_OPENSSL

Path to OpenSSL

OPENDDS_GTEST

Path to GoogleTest

OPENDDS_JAVA

Path to Java Currently unsupported.

OPENDDS_QT

Path to Qt

OPENDDS_RAPIDJSON

Path to RapidJSON

OPENDDS_XERCES3

Path to Xerces

OPENDDS_HOST_TOOLS

A directory that contains a bin directory with opendds_idl to be used for cross-compiling.

Added in version 3.26.

OPENDDS_ACE_TAO_HOST_TOOLS

A directory that contains a bin directory with tao_idl and ace_gperf to be used for cross-compiling. This isn’t set by default unless OPENDDS_HOST_TOOLS is set, in which case it defaults to that.

Added in version 3.26.

Features
OPENDDS_CXX11

ACE/TAO and OpenDDS were built with C++11 or later. Default depends on the compiler being used. Has no effect when building OpenDDS using CMake.

OPENDDS_CXX_STD

Added in version 3.28.

If defined, then this value is prefixed with cxx_std_ and passed to target_compile_features for all targets. The valid values are the standards in CMAKE_CXX_KNOWN_FEATURES without the leading cxx_std_. This is the minimum C++ standard required to use the ACE, TAO, and OpenDDS libraries. When building OpenDDS using CMake, it’s also the minimum C++ standard used to build OpenDDS. The default depends on the version of ACE being used.

OPENDDS_DEBUG

Default depends on CMAKE_BUILD_TYPE. When building OpenDDS using CMake CMAKE_BUILD_TYPE should be used.

OPENDDS_OPTIMIZE

Default depends on CMAKE_BUILD_TYPE. When building OpenDDS using CMake CMAKE_BUILD_TYPE should be used.

OPENDDS_INLINE

.inl files are included in header files. Default is ON Has no effect when building OpenDDS using CMake.

OPENDDS_VERSIONED_NAMESPACE

ACE/TAO and OpenDDS have versioned namespaces. Default is OFF

OPENDDS_STATIC

ACE/TAO are built as static libraries. Default depends on BUILD_SHARED_LIBS. When building OpenDDS using CMake BUILD_SHARED_LIBS should be used.

OPENDDS_WCHAR

ACE/TAO prefers using wide characters. Default is OFF

OPENDDS_TAO_IIOP

Default is ON

OPENDDS_TAO_OPTIMIZE_COLLOCATED_INVOCATIONS

Default is ON

OPENDDS_BUILT_IN_TOPICS

Default is ON

OPENDDS_OBJECT_MODEL_PROFILE

Default is ON

OPENDDS_PERSISTENCE_PROFILE

Default is ON

OPENDDS_OWNERSHIP_PROFILE

Default is ON

OPENDDS_OWNERSHIP_KIND_EXCLUSIVE

Default is the value of OPENDDS_OWNERSHIP_PROFILE.

OPENDDS_CONTENT_SUBSCRIPTION

Default is ON

OPENDDS_CONTENT_FILTERED_TOPIC

Default is the value of OPENDDS_CONTENT_SUBSCRIPTION.

OPENDDS_MULTI_TOPIC

Default is the value of OPENDDS_CONTENT_SUBSCRIPTION.

OPENDDS_QUERY_CONDITION

Default is the value of OPENDDS_CONTENT_SUBSCRIPTION.

OPENDDS_SECURITY

Default is OFF

OPENDDS_SAFETY_PROFILE

Default is OFF