8 个重大版本更新
0.18.0 | 2023年6月2日 |
---|---|
0.17.0 | 2023年2月1日 |
0.16.0 | 2022年5月12日 |
0.15.1 | 2020年10月21日 |
0.10.0 | 2019年4月15日 |
#745 在 开发工具 中排名
249 每月下载量
在 c2rust 中使用
1MB
24K SLoC
C2Rust 转换器
基本用法
使用 transpile
子命令调用转换器模块
c2rust transpile [args] compile_commands.json [-- extra-clang-args]
以下参数控制基本转换器行为
--emit-modules
- 将每个翻译后的 Rust 文件作为模块发布(默认是将每个文件作为其自己的包)。--fail-on-error
- 如果源文件无法完全转换,则失败而不是警告。--reduce-type-annotations
- 不在不需要时发布显式类型注释。-f <regex>
、--filter <regex>
- 仅根据使用的正则表达式翻译文件。
创建 cargo 构建文件
转换器可以根据以下选项为转换后的 Rust 源代码创建骨架 cargo 构建文件
-e
,--emit-build-files
- 生成构建文件以将翻译后的Rust代码作为库构建。构建文件将输出到由--output-dir
指定的目录,如果没有指定,则输出到包含compile_commands.json
的目录。这将不会覆盖现有文件,所以在重新创建构建文件之前请删除这些构建文件。(意味着--emit-modules
)-b <main_module>
,--binary <main_module>
- 生成构建文件以将翻译后的Rust代码作为可执行文件构建。主函数必须位于指定的模块(C源文件)<main_module>
中。<main_module>
应该是裸模块名称,不包括.rs
扩展名。构建文件将输出到由--output-dir
指定的目录,如果没有指定,则输出到包含compile_commands.json
的目录。这将不会覆盖现有文件,所以在重新创建构建文件之前请删除这个构建文件目录。(意味着--emit-build-files
)
跨检查工具
翻译器可以为跨检查对翻译后的Rust代码进行工具化。以下选项控制这种工具化。
-
,--cross-checks
- 添加宏和构建文件以进行跨检查。--use-fakechecks
- 使用fakechecks
库进行跨检查,而不是使用默认的在线检查。-<config>
,--cross-check-config <config>
- 使用给定的配置文件作为跨检查的配置。
开发者指南
c2rust-transpile库使用c2rust-ast-exporter库将C代码翻译为Rust。ast-exporter库链接到本机clang编译器前端以解析C代码,并导出AST供翻译器使用,翻译器完全用Rust实现。
依赖项
~9-23MB
~292K SLoC