はじめに
本記事の内容はThe Cargo Bookの3.5. Profilesと4.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]テーブルで変更することが出来ます。(引用元)
[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
orfalse
: 一切のデバッグ情報を含まない -
1
: ラインテーブルのみ -
2
ortrue
: 全てのデバッグ情報
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を有効にするかを指定します。