1

私はライブラリを作成し、そのライブラリをプログラムで使用しています。私はよくプログラム コードを変更し、アサートをオンにしてテストを実行し、テストに合格したら、アサートをオフにしてベンチマークを実行し、行った変更によるパフォーマンスへの影響を測定します。また、テスト用のライブラリでアサートをオンにし、ベンチマーク用のライブラリでアサートをオフにしたいと考えています。そのため、プログラムとライブラリでアサート設定を同時に切り替える必要が頻繁に生じます。

ライブラリとプログラム (ライブラリを使用する) のアサート設定 (NDEBUG) を一致させることは、手動で行うべきではありません。ヘッダーにアサートがあるため、間違っていると未定義の動作を意味し (定義の競合により未定義の動作が発生します)、実際にクラッシュが発生するためです。 assert-on ライブラリを使用して assert-off プログラムをビルドすると、GCC を使用してプログラムを作成できません。これを行う標準的な方法が何であるかを見つけることができませんでした。ライブラリ ビルド システムに libfoo-1.0 と libfoo-assert-1.0 またはそのような名前の 2 つのバイナリ (および、間違ったアサート設定 (NDEBUG) が含まれていると文句を言うヘッダー) をインストールすることを検討しています。

ライブラリとプログラムの間で assert 設定を一致させ、同時に両方の assert 設定を切り替えるのが簡単、迅速、そしてエラーが発生しにくいようにする最善の方法は何ですか?

4

1 に答える 1

1

通常、ビルド システムはさまざまなビルド (デバッグ/リリース、マルチ/シングル スレッドなど) を実行するように設定されています。結果のライブラリと実行可能ファイルは、異なるディレクトリに配置されるか、それらを区別するために異なる名前が付けられます。これも例外ではありません。

assert/noassert に追加のビルド タイプが必要だと思われる場合は、この追加のビルド タイプを追加してください。唯一の問題は、命名規則と、特定のビルド タイプが指定されていない場合のデフォルトの動作です。

于 2012-07-27T21:30:28.367 に答える