如何以编程方式编译Rust程序?

时间:2015-11-18 05:33:45

标签: rust

鉴于我试图以表达式树的形式创建的库的元数据,我希望能够将其转换为某种特定于Rust的语法树,可以将其提供给Rust编译器。

我找到了related question,但它已经过时了。

1 个答案:

答案 0 :(得分:4)

是的。 Rust编译器本身。整个编译器都是一个库,而rustc只是一个调用编译器的小包。作为一个例子,有stupid-stats箱子。它运行rust编译器以生成有关代码的一些统计信息。

您只需要导入rustcrustc_driver包(使用extern crate)并为类型实现rustc_driver::CompilerCalls特征(让我们称之为MyDriver })。然后你可以像这样运行rustc:

let args: Vec<_> = std::env::args().collect();
let mut my_driver = MyDriver::new();
rustc_driver::run_compiler(&args, &mut my_driver);

您需要确保传递标准库和核心库的路径。在我的情况下,我添加了

"-L $HOME/.multirust/toolchains/nightly/lib/rustlib/x86_64-unknown-linux-gnu/lib"

到命令行。您不能简单地将其添加到args向量,因为此处未解析$HOME。因此,您需要更多代码来提取$HOME env var并构建您的命令。