运行`rustc`来检查程序而不生成任何文件

Luk*_*odt 6 rust

如图cargo check所示,检查程序是否格式正确而不实际生成代码(通常非常耗时的任务)通常很有用.我想直接检查单个(库)Rust文件rustc(我不能使用Cargo!).

cargo check 显然通过调用这个来工作:

rustc --emit=metadata -Z no-codegen
Run Code Online (Sandbox Code Playgroud)

这只发出元数据,一个.rmeta文件.货物实际上需要根据已检查的箱子检查包装箱.在我的情况下,我真的不需要元数据文件.

我尝试了以下方法:

rustc --crate-type=lib --emit=
rustc --crate-type=lib --emit=nothing
Run Code Online (Sandbox Code Playgroud)

但两者都没有用.我使用--crate-type=lib是因为我的文件没有main功能.我需要一个独立于平台的解决方案(我不只是想在我的机器上使用它,而是在公共脚本中使用它).

如何rustc不写单个文件?

H2O*_*H2O 5

您可以跳过该--emit标志。

最终的命令将是:rustc -Z no-codegen rust.rs

  • 这仅适用于夜间编译器。 (3认同)

And*_*org 5

引用我自己关于这个问题的 GitHub 评论,稳定 Rust 有几个选项:

\n\n
    \n
  • rustc --emit=mir -o /dev/null似乎可以在 1.18 及更高版本中工作,无需编写任何内容。(--emit=mir是唯一有用的--emit选项\xe2\x80\x94,其他人尝试创建愚蠢的文件,例如/dev/null.foo0.rcgu.o, except --emit=dep-info,它不进行检查。)
  • \n
  • rustc -C extra-filename=-tmp -C linker=true(即用作/bin/true\xe2\x80\x9clinker\xe2\x80\x9d)似乎适用于所有版本,编写一些中间文件但清理它们。
  • \n
  • rustc --out-dir=<new empty temporary directory>不那么聪明,因此也许不太可能崩溃?
  • \n
\n\n

请注意,前两个选项(也不是仅夜间选项)不会发现链接器错误(如果有-Zno-codegen)。

\n