11 个版本
0.1.10 | 2023年7月5日 |
---|---|
0.1.9 | 2023年4月22日 |
0.1.6 | 2022年6月26日 |
0.1.5 | 2022年2月16日 |
#888 in 命令行工具
48KB
1K SLoC
cyagen
C 语言代码的 Yet Another GENerator
通过 C 源文件减少手动准备包含 C 代码信息的脚本文件的劳动强度。
- 使用简单的模式匹配扫描 C 源文件以捕获代码中的元素
- 使用模板文件生成文本文件
- 支持包含、局部变量和函数等元素
在模板文件中更好地使用 jinja2 格式
- 从 0.1.19 版本开始,cyagen 使用 tera 支持 jinja2 格式的模板文件
- 如果模板文件扩展名是 .j2 或 .tera,cyagen 将使用 tera 引擎生成目标文件
- 示例: 基于 C 代码创建 googletest 脚本框架和 CMakeLists.txt
$ cyagen --source ./example/source/sample.c --temp-dir ./example/template --output-dir ./.output
$ cd .output
$ cmake -S . -B build
$ cmake --build build
$ cd build && ctest
模板文件中可用的标识符
所有可用的标识符可以在 docs.rs 上找到
注意:所有新标识符在旧风格的模板(非 jinja2 格式)中均不受支持。
示例
let sourcename = "source";
let code = "\
#include <stdio.h>
static int var = 1;
static int func1(void)
{
return 0;
}
int func2(char c)
{
return func1();
}
";
let temp = "\
// include
{%- for inc in incs %}
{{ inc.captured | safe }}
{%- endfor %}
// local variables
{%- for var in static_vars %}
{{ var.dtype }} {{ var.name }};
{%- endfor %}
// functions
{%- for fnc in fncs %}
{{ fnc.rtype }} {{ fnc.name }}({{ fnc.args }});
{%- endfor %}
";
let parser = cyagen::Parser::parse(code);
let gen = cyagen::generate_using_tera(&parser, temp, sourcename);
println!("{}", gen);
结果
// include
#include <stdio.h>
// local variables
int var;
// functions
int func1();
int func2(char c);
默认应用程序命令行使用方法
$ cyagen --help
cyagen 0.1.10
Text file generator based on C file and templates
USAGE:
cyagen [OPTIONS] --source <SOURCE>
OPTIONS:
-s, --source <SOURCE> source file path
-t, --temp-dir <TEMP_DIR> template directory
-o, --output-dir <OUTPUT_DIR> output directory
-j, --json-filepath <JSON_FILEPATH> output json file path
-h, --help Print help
-V, --version Print version
$
依赖项
~9–19MB
~254K SLoC