Rustのバイナリにファイルパスが入っちゃう件
実行ファイルにパスが入ってしまう
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 で特定のバージョンのコンパイラを使いたいとき
ここから使いたいバージョンのコンパイラを選択していつ master ブランチから分岐したかを調べる。その日付を参考に Cargo.toml と同じ階層に rust-toolchain ファイルを作成し nightly-YYYY-MM-DD と記述する。そうすると大体ほしいバージョンが手に入る。