0

我正在使用 CMake 从 IDL 生成文件并将它们放在 RedHat 上的库中。问题是,未生成 <idl_file>Support[c,h] 文件,因此我无法注册类型支持。在 CMake 中,我有以下行生成 <idl_file>Plugin.[c,h] 和 <idl_file>.[cxx,h] 文件。问题是,它没有生成任何 <idl_file>Support.[cxx,h] 文件。

connextdds_rtiddsgen_run(IDL_FILE myFile.idl LANG "C++11")

据我所知,我不是通过在内部创建一个库来独立使用它们,对吗?我没有使用 NDDS_STANDALONE_TYPE,也没有添加 ndds_standalone_type.cxx。

如果我使用以下命令行,将显示 <idl_file>Support[c,h] 文件。

rtiddsgen -namespace myFile.idl

但是,如果我手动添加 *Plugin.[c,h]、*Support.[c,h] 和 *.[ch] 文件并编译成一个库,然后用我的程序链接它,就会有一个许多未定义的引用,例如:

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 文件?

4

1 回答 1

1

根据定义函数的脚本ConnextDdsCodegen.cmakeconnextdds_rtiddsgen_run ,预计将为C++*Support.cxx语言生成文件和文件:*Support.h

list(APPEND sources "${path_base}Plugin.cxx" "${path_base}Support.cxx")
list(APPEND headers "${path_base}Plugin.h" "${path_base}Support.h")

但是对于C++11语言,我看不到添加这些文件。

可能这意味着不会为 C++11(以及 C++03)生成给定的文件(*Support.cxx*Support.h)。

于 2021-07-09T18:42:48.647 回答