加载中...

Rust 开发中编译输出文件大的解决方案

我的电脑只有256G的硬盘,所以剩下的硬盘空间不太多,Rust 编译出来的文件很大,一个项目恶心到5G 多。我查看Rust占用硬盘达到了150多G。所以一直想怎么优化,或者删除编译资源。我分为三种情况,

  1. 编译的时候输出变小
  2. 运行结束输出清理
  3. 整个存放 Rust 的文件夹进行清理
编译的时候输出变小的 shell 代码
shell
代码解读
复制代码
#!/bin/bash # 检查是否安装了 Rust if ! command -v cargo &> /dev/null; then     echo "Cargo 未安装,请安装 Rust 工具链。"     exit 1 fi # 设置优化标志以减小 debug 构建的大小 export RUSTFLAGS="-C opt-level=1" # 开始编译 echo "开始编译..." cargo build # 检查编译是否成功 if [ $? -ne 0 ]; then     echo "编译失败,请检查错误信息。"     exit 1 fi # 获取二进制文件路径 binary_path=$(cargo metadata --format-version=1 --no-deps | jq -r ''.target_directory'')/debug/$(cargo metadata --format-version=1 --no-deps | jq -r ''.packages[0].targets[] | select(.kind[0]=="bin") | .name'') if [ ! -f "$binary_path" ]; then     echo "无法找到编译后的二进制文件。"     exit 1 fi # 显示二进制文件大小 echo "编译完成。二进制文件大小:" du -h "$binary_path" # 运行调试版本 echo "运行调试版本..." "$binary_path"
  • 把上面的 shell 制作成一个文件best_build.shell
  • 然后进行 chmod +x best_build.sh
  • 再在.zshrc 或者 bash 中 添加别名 alias bb="~/Soft/VSCode/best_build.sh"
    这样就可以工程中运行bb命令优化编译输出,大概能减少一半以上的输出文件。

运行结束输出清理的代码

1.编译优化的运行结束,再清理

bash
代码解读
复制代码
#!/bin/bash # 处理清理操作的函数 cleanup() {     echo "执行 cargo clean..."     cargo clean     echo "清理完成。" } # 捕获 INT 信号(Ctrl+C)和 EXIT 事件 trap cleanup INT EXIT # 编译过程 echo "开始编译..." cargo build # 检查编译是否成功 if [ $? -ne 0 ]; then     echo "编译失败,请检查错误信息。"     exit 1 fi # 获取编译后的二进制文件路径 binary_path=$(cargo metadata --format-version=1 --no-deps | jq -r ''.target_directory'')/debug/$(cargo metadata --format-version=1 --no-deps | jq -r ''.packages[0].targets[] | select(.kind[0]=="bin") | .name'') if [ ! -f "$binary_path" ]; then     echo "无法找到编译后的二进制文件。"     exit 1 fi # 显示二进制文件大小 echo "编译完成。二进制文件大小:" du -h "$binary_path" # 运行调试版本 echo "运行调试版本..." "$binary_path" # 运行结束 echo "运行结束,已执行清理。"

2.不拥有编译优化,运行结束后清理

bash
代码解读
复制代码
#!/bin/bash # 处理清理操作的函数 cleanup() {     echo "执行 cargo clean..."     cargo clean } # 捕获 INT 信号(Ctrl+C)和 EXIT 事件 trap cleanup INT EXIT # 正常执行 cargo run echo "执行 cargo run..." cargo run # 当 cargo run 执行完毕或被中断时,触发 cleanup echo "cargo run 结束,已执行清理。"

还是需要跟上面一样增加权限和别名。例如:

ini
代码解读
复制代码
alias brc="~/Soft/VSCode/build_run_clean.sh" 或者 alias rc="~/Soft/VSCode/run_clean.sh"

这样才可以工程文件下使用brc或rc命令,运行结束或者 ctrl+c 中断都可以清理输出。

对整个存放所有Rust的工程文件夹进行清理

bash
代码解读
复制代码
#!/bin/bash # 定义处理单个项目的函数 build_project() {     local project_dir="$1"     # 检查项目目录是否存在     if [ ! -d "$project_dir" ]; then         echo "警告:项目目录 $project_dir 不存在,跳过清理。"         return 1     fi     # 进入项目目录     cd "$project_dir" || {         echo "无法访问项目目录 $project_dir"         return 1     }     if [ -f "Cargo.toml" ]; then         echo "当前$project_dir 异常"     else         echo "警告:项目目录 $project_dir 中没有 Cargo.toml 文件,跳过清理。"         return 1     fi     # 执行 cargo clean     echo "正在 清理项目:$project_dir"     cargo clean     # 检查构建是否成功     if [ $? -ne 0 ]; then         echo " 清理失败,请检查错误信息。"         return 1     else         echo "清理成功。"     fi     # 返回上一级目录     cd - > /dev/null } #  遍历当前目录及其所有后代子目录,查找包含 Cargo.toml 文件的目录 find . -type f -name "Cargo.toml" | while read -r cargo_toml_file; do     # 获取包含 Cargo.toml 文件的目录 project_dir=$(dirname "$cargo_toml_file")     # 检查 target 目录是否存在     if [ -d "$project_dir/target" ]; then         # 清理项目         build_project "$project_dir"     else         echo "警告:项目目录 $project_dir 中没有 target 目录,跳过清理。"     fi done

同样的增加权限和别名,例如: alias cca="~/Soft/VSCode/cargo_clean_all.sh" 这样就可以在存放所有 Rust 项目的工程文件夹目录下运行 cca 命令就可以清除所有工程的编译输出的了,我存放Rust 的文件夹从150G,直接变成了1.6G。 Rust 编译输出真的太恶心的了,希望对你有所帮助。