【发布时间】:2021-07-09 14:31:51
【问题描述】:
我正在使用 CMake 从 IDL 生成文件并将它们放在 RedHat 上的库中。问题是,未生成
connextdds_rtiddsgen_run(IDL_FILE myFile.idl LANG "C++11")
据我所知,我不会通过在其中创建包含它们的库来将它们作为独立使用,对吗?我没有使用NDDS_STANDALONE_TYPE,也没有添加ndds_standalone_type.cxx。
如果我使用以下命令行,
rtiddsgen -namespace myFile.idl
但是,如果我手动添加 *Plugin.[c,h]、*Support.[c,h] 和 *.[c.h] 文件并编译成一个库,然后用我的程序链接它,有很多未定义的引用,例如:
myns::myTypePlugin_serialize_to_cdr_buffer(char*, unsigned int*, myns::myType const*) myns::myTypeSeq::length() const
myns::myTypePluginSupport_create_data_w_params(myns::myType*, DDS_TYPEDeallocationParams_t const*)
myns::myTypePluginSupport_create_data_w_params(DDS_TypeAllocationParams_t const*)
所以我试图让 CMake 为我完成这项工作,希望得到更好的结果。如何让 CMake 生成这些 TypeSupport 文件?
【问题讨论】:
-
根据source,函数
connextdds_rtiddsgen_run有效地创建了一个自定义命令,它能够产生列在*_SOURCES和*_HEADERS变量中的文件(变量的确切名称见文档)。它应该是一些依赖于这些文件的 target。否则,将不会生成任何内容。通常,此类目标是使用add_executable/add_library创建的,并将给定文件列为其源。但是您可以创建任何依赖于这些文件的自定义目标。 -
我直接使用来自 RTI 的 ConnextDdsCodegen.cmake 文件,因此,
_CXX11_GENERATED_SOURCES 变量,虽然它包含我上面得到的文件,但它不包括 Support。[ cxx,h] 文件。 -
根据source,文件
Support.cxx和Support.h被添加到C++语言的*_SOURCES和*_HEADERS列表中,但我明白了您使用的 C++11 语言没有这样的添加。如果这些文件是实际创建的,那么鉴于 CMake 脚本可能是错误的,请随时向开发人员报告错误。 (我不是 IDL 方面的专家,所以我不能确定是否应该生成给定的文件以及是否应该使用它们。) -
@Tsyvarev - 如果你想回答这个问题,我会标记它。 C++ 确实生成了所需的文件,但我认为不应该生成 C++11。我会和他们一起跟进这件事。
标签: cmake publish-subscribe data-distribution-service rti-dds