デバッグビルドとリリースビルドは単なる名前です。彼らは何の意味もありません。
アプリケーションに応じて、コンパイラとリンカのオプションのさまざまな組み合わせを使用して、1つ、2つ、またはそれ以上の異なる方法でアプリケーションを構築できます。 ほとんどのアプリケーションは、単一のバージョンでのみビルドする必要があります。クライアントが使用するのとまったく同じプログラムをテストおよびデバッグします。場合によっては、2つの異なるビルドを使用する方が実用的かもしれません。全体として、パフォーマンス上の理由からクライアントコードを最適化する必要がありますが、デバッグ時に最適化する必要はありません。また、完全なデバッグ(つまり、イテレーターの検証など)によって、アルゴリズムのデバッグでもコードが遅すぎる場合があるため、完全なデバッグチェックを含むビルドを作成します。最適化は行われていませんが、イテレーターのデバッグは行われません。 、および最適化されたもの。
アプリケーションを起動するときはいつでも、必要なオプションを決定し、対応するビルドを作成する必要があります。あなたはそれらを好きなように呼ぶことができます。
外部ライブラリ(wxwidgetsなど)に関して:異なるオプションを使用すると、すべてのコンパイラにいくつかの非互換性があります。したがって、(ソース形式以外で)ライブラリを提供する人は、いくつかの問題に応じて、いくつかの異なるバージョンを提供する必要があります。
リリースとデバッグ:リリースバージョンは、多かれ少なかれ標準的な最適化オプションのセットを使用してコンパイルされています(イテレーターのデバッグはありません)。最適化なし、およびイテレータデバッグありのデバッグバージョン。イテレータのデバッグが存在するかどうかは、通常、バイナリ互換性を損なうものの1つです。ライブラリベンダーは、各バージョンと互換性のあるオプションを文書化する必要があります。
ANSI vs. Unicode:これはおそらく
文字データの狭いchar
vs広いことを意味します。wchar_t
アプリケーションで使用するものに対応するものを使用してください。(これら2つの違いは、一部のコンパイラスイッチだけではないことに注意してください。根本的に異なるコードが必要になることが多く、すべての場合でUnicodeを正しく処理することは簡単ではありません。実際にUnicodeをサポートするアプリケーションは、文字の作成などを認識している必要があります。または双方向書き込み。)
静的vs.動的:これにより、ライブラリのリンク方法とロード方法が決まります。通常、少なくとも、アプリケーションを開発しているマシン以外のマシンにアプリケーションをデプロイすることを期待している場合は、静的が必要になります。ただし、これはライセンスの問題にも依存します。ライブラリがデプロイされているマシンごとにライセンスが必要な場合は、動的を使用する方が理にかなっている場合があります。