【Rust 小技巧】 指定 target 輸出目錄
在 Rust 編程語言中,target
目錄是由 Cargo(Rust 的包管理和構建工具)自動生成的。它主要用於存放構建輸出的產物文件和相關的編譯期產生的中間文件等。但是 target
目錄往往會非常大,即使一個簡單的 hello world
程序,就已經達到 9 MB 了。
可能一個比較簡單的項目,會達到 1 GB 多。甚至有些網友調侃——如果電腦硬盤太小,可能學不了 Rust。
0x01 指定 target 目錄
另外當電腦中的 Rust 項目太多時,無法管理 target 目錄。其實我們可以指定所有項目統一的 target 目錄。下面將以 Windows 操作系統爲例演示。
首先在 C:\Users\用戶名\.cargo\
目錄下,找到 config.toml
文件。如果在該目錄下沒有 config.toml
文件,則需要創建該文件。如下圖所示:
注意:config
文件也有可能沒有擴展名,如 config
,又或者是其它擴展名,如 config.txt
,配置文件的擴展名不重要,重要的是文件名稱必須是 config
。
在文件中添加下面的配置信息:
[build]
target-dir = "D:/my-target"
上面的配置是指定所有項目的統一 target 目錄爲 D:/my-target
。如下圖:
我們再次編譯項目,查看項目根目錄和 D:/my-target
目錄,如下圖:
可以看到,在項目的工程目錄已經沒有 target
目錄,真正的 target
目錄已經被我們指定爲 D:/my-target
目錄了。
0x02 target 目錄有什麼
下面是一個簡單項目的 target
目錄,讓我們看下它會包含什麼呢?
target
目錄包含以下幾個子目錄和文件:
target/debug
:
-
存儲調試模式下構建的可執行文件和庫文件。
-
包含中間編譯產物,如對象文件(
.o
文件)和生成的二進制文件。
target/release
:
-
存儲發佈模式下構建的可執行文件和庫文件。
-
與調試模式相比,發佈模式進行了優化,生成的二進制文件通常更小且運行速度更快。
target/doc
:
- 存放項目文檔(通常是通過
cargo doc
命令生成的 HTML 文檔)。
target/.fingerprint
:
- 存儲構建的指紋文件,用於跟蹤哪些文件已經被編譯以及是否需要重新編譯。
target/package
:
- 存放項目打包後的文件,通常用於
cargo publish
命令發佈到crates.io
倉庫。
其他臨時文件和目錄:
- 包括構建緩存、生成的彙編代碼等。
0x03 指定 target 目錄的優缺點
統一存放 target
文件既有優點也有缺點:
優點
緩存複用:
如果多個項目使用相同的依賴庫,通過指定一個共享的 target
目錄,可以複用編譯緩存,減少重複編譯的時間,大幅提升構建效率。
管理方便:
通過將編譯輸出集中到一個特定目錄,可以更方便地管理和清理編譯輸出文件。當 Rust 項目過多時,我們可以隨時清理 target
文件。
缺點
多個項目共享同一個 target
目錄可能會因爲不同的依賴版本而產生衝突,當遇到衝突時需要及時清理 target
目錄。
0x04 小結
總體上講,指定 target 目錄可以帶來顯著的構建效率提升,但也需要考慮潛在的版本衝突問題,這個需要根據實際的項目來取捨。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/B0sIBX355tLCXYJ9l4V7cw