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

时间:2018-07-23 19:16:37

标签: rust

cargo check所示,通常在不实际生成代码的情况下检查程序是否格式正确(这通常是一项非常耗时的任务),通常很有用。我想直接用rustc检查一个(库)Rust文件(我不能使用Cargo!)。

cargo check显然可以这样调用:

rustc --emit=metadata -Z no-codegen

这仅发出元数据,一个.rmeta文件。货物实际上需要根据已检查的板条箱检查板条箱。就我而言,我真的不需要元数据文件。

我尝试了以下操作:

rustc --crate-type=lib --emit=
rustc --crate-type=lib --emit=nothing

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

如何使rustc不写单个文件?

2 个答案:

答案 0 :(得分:2)

要引述my own GitHub comment这个问题,有一些用于稳定Rust的选项:

  • rustc --emit=mir -o /dev/null似乎可以在1.18及更高版本中使用,什么也没写。 (--emit=mir是唯一有用的--emit选项;其他人尝试创建/dev/null.foo0.rcgu.o之类的傻文件,但--emit=dep-info除外,后者不进行检查。)
  • rustc -C extra-filename=-tmp -C linker=true(即使用/bin/true作为“链接器”)似乎在所有版本中都可以使用,可以编写一些中间文件,但可以清理它们。
  • rustc --out-dir=<new empty temporary directory>不太聪明,因此可能不太可能崩溃?

请注意,前两个选项(也不是每晚仅-Zno-codegen选项)将找不到链接器错误(如果有的话)。

答案 1 :(得分:1)

您可以跳过account_status.id.id标志。

最后的命令将是:--emit