c# - 在 CMake 中使用多个代码生成器

标签 c# cmake swig

我正在尝试使用基于单个 CMake 项目的 SWIG 创建一个 C# 应用程序,其中两个代码生成器使用这样的依赖树按顺序调用

CMake Project A
  Target 1: Json -> C++ code generator using add_custom_command()
    L Target 2: C++ -> C# code generator using swig_add_library()
        L Target 3: C# application using add_executable()

问题是在构建 Target 2 时,SWIG 生成了许多文件名未知的 C# 文件。因此,我们需要提前知道所有这些文件名才能构建 Target 3。

谁能建议我想做的是在单个 CMake 项目 (A) 中完成还是我必须像这样将它分成两个 CMake 项目 (A & B)

CMake Project A
  L CMake Project B

目标像这样分割

CMake Project A
  Target 1: Json -> C++ code generator using add_custom_command()
    L Target 2: C++ -> C# code generator using swig_add_library()

CMake Project B
  Target 1: C# application using add_executable()

是否有像我这样使用多个代码生成器的已知 CMake 模式?

最佳答案

看完UseSWIG.cmake我想出了以下想法:

  1. 弄清楚 swig_add_library() 是如何创建目标的真的被称为。在 UseSWIG.cmake代码称为${SWIG_MODULE_${name}_REAL_NAME} .你可以用 make help 找到它,例如。

  2. 阅读SOURCES swig 目标的属性:get_property(TARGET <target from p.1> PROPERTY SOURCES .这应该会为您提供 swig 生成的源列表。

关于c# - 在 CMake 中使用多个代码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939860/

相关文章:

javascript - .net 中的 WebBrowser 控件如何处理 ObjectForScripting

c++ - 在 Mac OS-X 上编译 C++ 程序时出现 "framework not found"

c++ - 为cmake生成的文件设置输出路径

c# - 在 C# uwp 中拒绝文件访问

c# - 异步lambda是否应在异步功能中运行?

c# - 使用 System.Runtime.InteropServices 但未找到 HandleRef

python - SWIG 和 Boost::变体

c# - 使用 SWIG 获取 C 结构来记住 C# 更改?

C#:从 Unity 上传照片到 Twitter

c++ - CMake:重建外部项目