💾 Archived View for dcreager.net › languages › rust › shared-target-directory.gmi captured on 2024-06-16 at 12:17:05. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
2024-01-30
Rust stores all compiler outputs (including compiled dependencies and intermediate files) in the “target” directory. By default, each workspace (typically, the cloned repo of a collection of related crates) has its own target directory, called ‘target’ and stored as a direct child of the workspace root. (This is why you typically see ‘/target/’ as an entry in a Rust repo's ‘.gitignore’ file.)
Target directories can get very large, because there is no garbage collection applied to it by default. This can become especially problematic if you work on several workspaces that have shared dependencies, since each target directory will include its own copy of those dependencies.
There is a config option that lets you use a shared target directory instead. Put this in your ‘~/.cargo/config.toml’ file:
[build] target-dir = ".cache/cargo/target"
(Note that relative paths are relative to the _parent_ of the directory containing the config file — i.e., your home directory for your global ‘~/.cargo/config.toml’.)