Cargoビルド構成セクション
Rustプロジェクトのプロパティの Cargoビルド構成 セクションではCargoの挙動やRustのコード生成オプションを変更することができます。
設定項目
大部分のオプションは デフォルト を設定値として指定することができます。これが指定された場合、CargoとRustのプロファイルごとのデフォルト値または検索パスに存在する別のCargo構成ファイルの設定値が使用されます。
- Cargoビルド構成をIDEで管理する
このセクションの設定内容をCargoに渡すかどうかを指定します。
独自のCargo構成ファイルを用意しており、SOLID-Rustにより設定内容をオーバライドされたくない場合にチェックを外してください。
- 最適化レベル
profile.name.opt-level = value
[The Cargo Book]コンパイラの最適化レベルを指定します。
- 最適化レベル 0 (opt-level = 0)
最適化を行いません。
- 最適化レベル 1 (opt-level = 1)
基本的な最適化を行います。
- 最適化レベル 2 (opt-level = 2)
最適化を行います。
- 最適化レベル 3 (opt-level = 3)
最大レベルの最適化を行います。
- サイズを最適化 (opt-level = "s")
バイナリサイズを最適化します。
- さらにサイズを最適化 (opt-level = "z")
バイナリサイズを最適化します。ループベクトル化を無効化します。
- リンク時最適化
profile.name.lto = value
[The Cargo Book]LLVMの機能を使用してコード生成単位をまたぐ最適化を行うかを指定します。リンク時最適化はRustプロジェクトの出力のみを対象範囲として行われます。(出力されたスタティックライブラリと外部のコードの間の境界を超えた最適化は行われません。)
- オフ (lto = "off")
リンク時最適化を行いません。
- オン (lto = "fat")
リンク時最適化を行います。
- thin (lto = "thin")
ThinLTOを適用します。ThinLTOは通常のLTOと似ていますが、複数のプロセッサコアを活用できるため、同等の最適化性能を発揮しながら大幅に短い時間で処理を終えることができます。
- thin local LTO (lto = false)
クレート単位でThinLTOを適用します。
- デバッグ情報
profile.name.debug = value
[The Cargo Book]デバッグ情報の出力を制御します。
- なし (debuginfo = 0)
デバッグ情報を生成しません。
- ラインテーブルのみ (debuginfo = 1)
ラインテーブルのみを生成します。
- 完全 (debuginfo = 2)
完全なデバッグ情報を生成します。
- オーバーフロー検査
profile.name.overflow-checks = value
[The Cargo Book]整数演算の実行時オーバフロー検査 [Rustリファレンス] を有効・無効化します。
- オフ (overflow-checks = false)
オーバーフロー検査を無効化します。
- オン (overflow-checks = true)
オーバーフロー検査を有効化します。
注釈
オーバフロー検査はビルトイン整数型 (e.g.,
usize
,u32
) の演算に対して適用されます。検査が有効な場合、オーバーフロー時にはパニックが発生します。検査が無効な場合はラップアラウンド演算が行われます。C/C++とは異なり、未定義動作を生じるケースはありません。
ラップアラウンド演算を意図的に行う場合は整数型に対して実装されている
wrapping_演算名
メソッド (e.g.,u32::wrapping_add()
) を使用してください。逆に、オーバーフローを明示的に検出・処理したい場合にはchecked_演算名
メソッド (e.g.,u32::checked_add()
) を使用してください。
- パニック戦略
profile.name.panic = value
[The Cargo Book]パニックが発生した場合の挙動を指定します。
- unwind (panic = "unwind")
スタックをアンワインドします。
呼出し階層内にあるローカル変数のデストラクタが呼び出され、最も深い
std::panic::catch_unwind()
の呼出しや、std::thread::spawn()
等のパニックハンドラが存在する場所まで呼出しが巻き戻され、パニックが捕捉されます。
- abort (panic = "abort")
アボートします。
注釈
アンワインドは以下の理由により失敗し、アボートに昇格されることがあります。
パニックハンドラが呼出し階層内にない。
extern "C" fn
を超えてアンワインドしようとした。アンワインド中にパニックした。
パニック処理にな必要カーネル資源の動的割り当てに失敗した。
アンワインドに必要なデータ構造が初期化されていない。
アンワインドが有効な状態でデバッグしているとき、パニック発生時点で実行を中断する方法についてはチュートリアル パニック原因を調査する を参照してください。
- コードカバレッジの有効化
target.name.rustflags = ["-Cinstrument-coverage", "-Zno-profiler-runtime"]
(unstable)コードカバレッジの記録用のコードを埋め込みます。
注意
SOLID-Rustの現時点のデフォルトツールチェーンではコンパイラのバグにより標準ライブラリのビルドに失敗するため、このオプションは使用できません。この問題は近日中のツールチェーンアップデートで解消予定です。
詳細
Cargo構成ファイル
Cargoパッケージマネージャは特定の検索パスから構成ファイル ./.cargo/config.toml
を読み込みます [The Cargo Book] 。この構成ファイルはcrates.ioからパッケージをダウンロードする際に使用するHTTPプロキシなどのパッケージマネージャとしての動作に関係する設定項目のほか、rustc (コンパイラ) に渡すコード生成オプションにも影響します。
Cargoビルド構成をIDEで管理する をチェックした場合、Rustプロジェクトのビルドシステムはビルド時にこの設定ファイルを一時的に生成し、検索パスの先頭の場所に配置します。これにより、IDEのソリューション構成ごとに固有のコンパイラオプションを指定することを可能にしています。プロファイル単位で指定することが必要な設定項目は全般セクションで指定したプロファイルに対して指定されます。
検索パスに複数の構成ファイルが存在する場合、それらの設定項目はCargoによってマージされます。これは複数のプロジェクト・ソリューションに対して同じオプションを適用したり、ソースツリーに含めたくない設定項目を別の場所で指定するのに有用です。例えば、Windowsでは $USERPROFILE
\.cargo\config.toml
に配置した構成ファイルはそのユーザアカウントが行う全てのビルド操作に適用されます。