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开发工具 中排名

Download history 56/week @ 2024-03-11 38/week @ 2024-03-18 17/week @ 2024-03-25 63/week @ 2024-04-01 47/week @ 2024-04-08 37/week @ 2024-04-15 51/week @ 2024-04-22 25/week @ 2024-04-29 33/week @ 2024-05-06 36/week @ 2024-05-13 33/week @ 2024-05-20 27/week @ 2024-05-27 76/week @ 2024-06-03 32/week @ 2024-06-10 88/week @ 2024-06-17 52/week @ 2024-06-24

249 每月下载量
c2rust 中使用

BSD-3-Clause

1MB
24K SLoC

Docs

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