21
13

More than 3 years have passed since last update.

cargo buildのコンパイルオプションについて

Posted at

はじめに

本記事の内容はThe Cargo Book3.5. Profiles4.2.2. cargo buildを引用してcargo buildのプロファイルについて紹介します。
詳細は引用元をご覧いただくようお願い致します。

Cargoに組み込まれているプロファイル

Cargoにはdev, release, test, benchの4つのプロファイルが組み込まれており、ビルドするターゲットと指定したコンパイルオプションに応じて自動でプロファイルが選択されます。
選択されるプロファイルは以下の表の通りです。(引用元

Target Default Profile --release Profile
lib, bin, example dev release
test, bench, or any target in "test" or "bench" mode test bench

また、それぞれのプロファイルはデフォルトで以下のような設定となっています。(引用元
個別のプロファイル設定については次節で紹介します。

dev release test bench
opt-level 0 3 0 3
debug true false 2 false
debug-assertions true false true false
overflow-checks true false true false
lto false false false false
panic 'unwind' 'unwind' 'unwind' 'unwind'
incremental true false true false
codegen-units 256 16 256 16
rpath false false false false

プロファイルの設定はCargo.tomlの[profile]テーブルで変更することが出来ます。(引用元

Cargo.toml
[profile.dev]
opt-level = 1               # Use slightly better optimizations.
overflow-checks = false     # Disable integer overflow checks.

プロファイル設定について

opt-level

最適化レベルを指定します。Rustには以下の6種類の最適化レベルが存在します。

  • 0 : 最適化なし + cfg(debug_assertions) をオンにする
  • 1 : 基本的な最適化
  • 2 : いくつかの最適化
  • 3 : 全ての最適化
  • "s" : バイナリサイズの最適化
  • "z" : バイナリサイズの最適化(ループのベクタライズをオフにする)

debug

コンパイルされたバイナリに含まれるデバッグ情報の量を指定します。

  • 0 or false : 一切のデバッグ情報を含まない
  • 1 : ラインテーブルのみ
  • 2 or true : 全てのデバッグ情報

debug-assertions

cfg(debug_assertions)による条件付きコンパイルのオン/オフを切り替えます。

  • true : 有効
  • false : 無効

overflow-checks

実行時の整数オーバーフローの動作を指定します。有効の場合、オーバーフローが発生するとpanicします。

  • true : 有効
  • false : 無効

lto

リンク時の最適化を有効にするオプションです。
※「薄い」「厚い」はあまり正しい表現ではないと思います。よい表現があれば教えていただけると幸いです。

  • false : ローカルクレートのみ「薄い」リンク時最適化を実行します
  • true or "fat" : 「厚い」リンク時最適化を実行します
  • thin : 「薄い」リンク時最適化を実行します
  • off : リンク時の最適化を行いません

panic

パニック時の動作を指定します。

  • "unwind" : パニック時にスタックを巻き戻します
  • "abort" : パニック時にプロセスを終了します

incremental

インクリメンタルコンパイルを有効にするかを指定します。

  • true : 有効
  • false : 無効

codegen-units

コード生成時に何個の「コード生成ユニット」に分割するかを指定します。コード生成ユニットが多いほどコンパイル時間が短縮される可能性がありますが、最適化を阻害する可能性があります。

rpath

rpathを有効にするかを指定します。

21
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
13