ソリューションにも複数のプロジェクトが含まれている同じ VS プロジェクトに複数のビルド構成を含めるための正しい簡単なステップバイステップの方法は何ですか? プロジェクトのビルド構成は異なります。基本的に、Dll Debug、Dll Release、Static (library) Debug、および Static (library) Release を含むプロジェクト A、.exe をビルドする Debug & Release を含むプロジェクト B のようなものを探しています。
2 に答える
それはそれが機能する方法ではありません。CRT を静的にリンクするか、CRT の DLL バージョンを使用するオプションをライブラリに与える場合は、EXE プロジェクトでも同じオプションを使用する必要があります。オプションを混在させると、通常、多くのリンカー エラーが発生します。それらを回避できたとしても、.lib の関数が EXE の関数とは異なるメモリ アロケータを使用すると、実行時に災害が発生します。
「それらすべて」のアプローチを使用することはほとんど意味がありません。静的ライブラリのみを使用し、モノリシック EXE BLOB を作成することがわかっている限り、CRT の静的バージョンは理にかなっています。プログラムの展開を容易にします。いつか DLL を使用することを検討している場合は、CRT の DLL バージョンだけが理にかなっています。
これを実現する最も簡単な方法は、同じソースをコンパイルする複数のプロジェクトを作成することです。必要なケース (DLL、静的ライブラリ) ごとにプロジェクトを作成できます。その後、これらのプロジェクトに複数の構成を設定して、複数のバリエーションを生成できるようにすることができます。
プロジェクト A (DLL)
- 「DebugStatic」構成 - デバッグ、静的 CRT -> MYLIBDS.DLL
- 「ReleaseStatic」構成 - リリース、静的 CRT -> MYLIBS.DLL
- "DebugDynamic" - デバッグ、DLL CRT -> MYLIBD.DLL
- "ReleaseDynamic" - リリース、DLL CRT -> MYLIB.DLL
プロジェクト B (LIB)
- 「DebugStatic」構成 - デバッグ、静的 CRT -> MYLIBDS.LIB
- 「ReleaseStatic」構成 - リリース、静的 CRT -> MYLIBS.LIB
- "DebugDynamic" - デバッグ、DLL CRT -> MYLIBD.LIB
- "ReleaseDynamic" - リリース、DLL CRT -> MYLIB.LIB
同じアプローチを使用して、Ansi と Unicode、x86 と x64、シングル スレッドとマルチスレッドなどの異なるバイナリを生成できます。各プロジェクトには、必要に応じて条件付きコード ブロックを含む同じソース ファイル セットが含まれます。次に、ライブラリに関連付けられたヘッダー ファイルに次のようなものを追加して、適切なバージョンでのリンクを容易にすることができます。
#ifdef _DEBUG
#ifdef _DLL
#pragma comment(lib, "MYLIBD.LIB")
#else
#pragma comment(lib, "MYLIBDS.LIB")
#endif
#else
#ifdef _DLL
#pragma comment(lib, "MYLIB.LIB")
#else
#pragma comment(lib, "MYLIBS.LIB")
#endif
#endif