less than 1 minute read

実行ファイルにパスが入ってしまう

crate とか使うとよくバイナリに crate に関連するファイルのパスが含まれてしまう。

これ Github に上がっている Rust 製のツールとか調べるとよくそのバイナリをコンパイルしたユーザのファイルパスが入っていたりするんだよね。

しかも以外と消し方が分からん。

最近やっと見つけたので雑に対処法

ついでによく使っている Cargo の設定も貼っておく

対策

trim-paths を使う

Cargo.toml の先頭に

1
cargo-features = ["trim-paths"]

その後 Cargo.toml に以下を追加

1
2
[profile.release]
trim-paths = "all"

コンパイル

1
cargo build --release

個人的にはこれが一番気に入っているけど残念ながら nightly channel でしか使えない。

対策 2

--remap-path-prefix を使う

これは挿入されるファイルパスを変更するもので消せるものではないので注意

MSVC を使っている場合のおすすめオプション

Rust でターゲットを MSVC にしているときデフォルトだと pdb が出力されちゃうからよくこの設定を使っている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cargo-features = ["trim-paths", "profile-rustflags"]
[package]
name = "name"
version = "0.1.0"
edition = "2021"

[dependencies]

[profile.release]
panic = "abort"
lto = true
strip = true
codegen-units = 1
opt-level = "z"
rustflags = [
    "-Cdebuginfo=0",
    "-Zlocation-detail=none",
    "-Clink-arg=/DEBUG:NONE",
    "-Clink-arg=/EMITPOGOPHASEINFO",
    "-Zthreads=16"
]

[unstable]
build-std = ["std", "panic_abort"]
build-std-features = ["panic_immediate_abort"]

nightly channel で特定のバージョンのコンパイラを使いたいとき

https://releases.rs/

ここから使いたいバージョンのコンパイラを選択していつ master ブランチから分岐したかを調べる。その日付を参考に Cargo.toml と同じ階層に rust-toolchain ファイルを作成し nightly-YYYY-MM-DD と記述する。そうすると大体ほしいバージョンが手に入る。

更新日時: