编译完成后可以执行任务吗?

问题描述

我知道 build.rs 可以在程序编译开始之前执行任务,所以我可以准备任何我想要的东西。

如果在编译完成后要执行一项任务,作为某种清理,该怎么办?有没有办法做这样的事情?

一个简单的例子:在编译之前,无论出于何种原因,我都想将文件foo.txt 重命名abc.txt。然后之后编译终止我想将它重命名foo.txt

解决方法

不,从 Rust 1.50 开始就没有。 RFC #1777 — Add Cargo post-build scripts 提出了这个建议,但没有被接受。

与此同时,一些 crate 制作了自己的本地 Cargo 第三方命令来模仿这一点。可以在 cargo-xtask 存储库中找到这种风格的文档。 TL;DR 形式:

  1. 创建一个本地二进制包,用于执行构建和您需要的任何其他操作。
  2. 添加一个 Cargo 别名来调用该 crate。
  3. 调用您的自定义命令:cargo xtask build

另见: