【问题标题】:How to get CMake to generate TypeSupport files such as <idl_file>Support.[cxx,h]?如何让 CMake 生成 TypeSupport 文件,例如 <idl_file>Support.[cxx,h]?
【发布时间】:2021-07-09 14:31:51
【问题描述】:

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

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

据我所知,我不会通过在其中创建包含它们的库来将它们作为独立使用,对吗?我没有使用NDDS_STANDALONE_TYPE,也没有添加ndds_standalone_type.cxx。

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

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.cxxSupport.h被添加到C++语言的*_SOURCES*_HEADERS列表中,但我明白了您使用的 C++11 语言没有这样的添加。如果这些文件是实际创建的,那么鉴于 CMake 脚本可能是错误的,请随时向开发人员报告错误。 (我不是 IDL 方面的专家,所以我不能确定是否应该生成给定的文件以及是否应该使用它们。)
  • @Tsyvarev - 如果你想回答这个问题,我会标记它。 C++ 确实生成了所需的文件,但我认为不应该生成 C++11。我会和他们一起跟进这件事。

标签: cmake publish-subscribe data-distribution-service rti-dds


【解决方案1】:

根据定义connextdds_rtiddsgen_run函数的脚本ConnextDdsCodegen.cmake,预计会为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 语言,我看不到添加这些文件。

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

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多