You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的Rust Rocket项目每次修改都会重新编译依赖?

问题描述

我正在使用Rust构建基于Rocket的Web服务器,每次做微小修改(比如添加一行println!())后运行cargo run,都会重新编译所有Rocket相关依赖,而非仅编译我的项目代码。按Rust的增量编译特性,正常情况下不应出现这种情况。

操作系统:Ubuntu 22

运行cargo run时会先出现以下提示并等待数秒:

Blocking waiting for file lock on build directory

随后开始编译大量依赖,最终才编译我的项目,日志示例如下:

Compiling version_check v0.9.4
   Compiling libc v0.2.137
   Compiling cfg-if v1.0.0
   ...(省略大量依赖编译日志)
   Compiling samson-lol v0.1.0 (/home/<me>/dev/samson-lol)

而我期望的输出应该只有:

Compiling samson-lol v0.1.0 (/home/<me>/dev/samson-lol)
解决方法

1. 确认增量编译配置

检查Cargo.toml的开发环境配置,确保增量编译处于开启状态(默认开启,可显式声明避免意外关闭):

[profile.dev]
incremental = true

2. 清理并重建缓存

缓存损坏可能导致重复编译,执行以下命令清理缓存后重新构建:

cargo clean
cargo run

后续的增量编译应恢复正常。

3. 释放构建目录锁

Blocking waiting for file lock提示说明可能有其他Cargo进程未正常终止,占用了构建目录。执行以下命令终止相关进程:

pkill -f cargo
pkill -f samson-lol  # 替换为你的项目二进制文件名

4. 调整Rocket依赖版本

你当前使用的是Rocket 0.5.0-rc.2候选版本,这类版本可能存在增量编译兼容性问题。建议升级到稳定版,同时确保依赖版本固定:

[dependencies]
rocket = "0.5.0"  # 使用稳定版而非候选版本

5. 修复目录权限

确保当前用户对target目录拥有完整读写权限,权限不足会导致缓存无法正常保存,进而触发重复编译:

sudo chown -R $USER:$USER target/

内容的提问来源于stack exchange,提问作者Jonathan Samson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:55:23