Visual Studio2005でコンパイルされているネイティブC++ライブラリ(Win32、MFCなし)がいくつかあり、多くのソリューションで使用されています。
それらを使用している特定のソリューションのニーズに応じて、静的ライブラリまたはDLLのいずれかとしてコンパイルおよびリンクすることを選択できるようにしたいと思います。
これを行うための最良の方法は何ですか?私はこれらのアプローチを検討しました:
1.複数のプロジェクトファイル
- 例:「foo_static.vcproj」と「foo_dll.vcproj」
- Pro:新しいライブラリ用に簡単に生成できます。手動でvcprojを変更する必要はありません。
- 短所:2か所の設定やファイルリストなどが簡単に同期しなくなります。
2.単一のプロジェクトファイル、複数の構成
- 例:「Debug|Win32」と「DebugDLL|Win32」など。
- 長所:ファイルリストの同期を維持するのは簡単です。コンパイルオプションの同期を維持するのはやや簡単です
- 短所:Win32とスマートデバイスの両方のターゲット用にビルドしているので、すでに複数の構成があります。組み合わせ爆発を悪化させたくない(「FooPhone用の静的ライブラリ| WinMobile 6」、「FooPhone用のダイナミックライブラリ| WinMobile 6」、「BarPda用の静的ライブラリ| WinMobile6」など)。
- さらに悪い点:VS 2005には、プラットフォーム「Foo」用に定義された構成がある場合、ソリューション内の他のすべてのプラットフォームにそれが本当に必要であり、構成/プラットフォーム構成のすべての順列を無計画に挿入すると想定するという悪い習慣があります。有効かどうかに関係なく、影響を受けるvcprojファイル。(バグはMSに提出され、WONTFIXとしてクローズされました。)
3.単一のプロジェクトファイル、vspropsファイルを介して静的または動的を選択
- 例:適切なvcprojフラグメントをプロパティシートファイルに保存し、静的ライブラリが必要な場合は「FooApp静的ライブラリ」プロパティシートをconfig / platformの組み合わせに適用し、DLLが必要な場合は「FooAppDLL」プロパティシートを適用します。
- 長所:これは私が本当にやりたいことです!
- 短所:それは不可能のようです。 静的ライブラリと動的ライブラリを切り替える.vcproj属性(Configuration要素のConfigurationType属性)は、.vspropsファイルでオーバーライドできないようです。これらのファイル用にMicrosoftが公開しているスキーマには、<Tool>要素と<UserMacro>要素のみがリストされています。
編集:誰かがそれを提案した場合に備えて、私は#3のより「賢い」バージョンも試しました。ここでは、「2」(DLL)または「 4 "(静的ライブラリ)、および.vcprojの構成をに変更しましたConfigurationType="$(ModuleConfigurationType)"
。Visual Studioは、警告なしにサイレントに属性を削除し、。に置き換えますConfigurationType="1"
。とても役に立ちました!
私はより良い解決策を逃していますか?