使用JICAN2模板从C/C++头文件生成文件
header2whatever的Python项目详细描述
header2whatever(h2w)
使用CPFEADADPARSER读取C/C++头文件中的任意文件 生成输出的输入文件和jinja2模板。
这是出于从C++头生成PybDn11缠绕代码的愿望而产生的。 文件夹。pybind11gen已经创建,但是我想生成更多的东西…
<> P>仍然有粗糙的边缘,文档大部分是不存在的,但是 非常欢迎使用修复/改进的拉取请求!安装
pip install header2whatever
用法
首先,您需要创建一个jinja2模板来表示您想要的任何内容 从头文件生成。例如,也许你想描述一下 yaml中的函数:
--- {% for header in headers %} {% for fn in header.functions %} {{ fn.name }}: returns: {{ fn.returns }} params: {% for param in fn.parameters %} - { name: {{ param.name }}, type: "{{ param.type }}" } {% endfor %} {% endfor %} {% endfor %}
假设您有以下头文件foo.h:
void some_fn(int i); int returns_int(int p1, char* p2);
您可以执行以下操作:
h2w foo.h -o foo.yml
您将得到以下输出:
--- returns_int: returns: int params: - { name: p1, type: "int" } - { name: p2, type: "char *" } some_fn: returns: void params: - { name: i, type: "int" }
正如你所看到的,虽然这是一个愚蠢的例子,但是这种方法非常灵活。 而且相当强大。
目前,传递给模板的数据结构没有文档化,但是 它是cppHeaderParser解析 头球。
有关更多示例,请参见“示例”文件夹。
批处理模式
如果需要处理多个文件,或者只想记录 在不编写shell脚本的情况下自动生成文件,批处理模式非常有用。你 传递两个参数:带有配置的yaml文件和输出目录 将文件写入。
使用外部来源的数据
有时候你想混入CPPHeaderParser不能给你的数据。如果你 传递--yaml选项,它将把yaml加载到字典中并使其成为 模板可用作“data”变量。
还可以通过--param选项传递key=value参数,以及 指定的密钥将可用于模板。
自定义处理
当你需要做更复杂的逻辑而Jinja2模板不是 适合于,可以指定从中加载自定义挂钩的python文件。
有关文档,请参见[默认挂钩](header2whatever/default_hooks.py)。
许可证
阿帕奇2