7

現在構築しているプロジェクト構成に応じて、異なるプロジェクト依存関係を設定したいと思います。

たとえば、リリース構成でSomeTestLib.vcprojをビルドしてリンクしたくないのですが、デバッグでビルドしてリンクしたいと思います。

ソートが機能する1つの解決策は、条件付きコンパイルマクロを使用することです。

#ifdef DEBUG  
#pragma comment( lib, "SomeTestLib" )  
#endif

ただし、この場合、デバッガーとIntelliSenseはSomeTestLibでは機能しません。
使用できる.slnまたは.vcprojハックはありますか?
ありがとう。

4

6 に答える 6

7

グーグルを何日も検索した後、私はついにこの問題の解決策を見つけることをあきらめ、VS開発者を吹き飛ばしました。

どうやら、IDEは、特定の構成で特定のライブラリのビルドを無効にしたことを認識し、それに依存するプロジェクトのリンカーコマンドラインにそのプロジェクトの出力を追加しないほど賢くはありません。あなたはこれを知っていると確信しています。

ただし、ライブラリプロジェクトからの出力行を依存プロジェクトのコマンドラインに貼り付けるだけなので、出力行を ""に設定すると、依存プロジェクトのリンカーコマンドラインに何も追加されません。

うまくいけば、この問題は将来VisualStudioで修正されるでしょう。私はそれが私のお気に入りのIDEであるため、楽観的であり続け、それがサポートする機能に常に感銘を受けています。ただし、私が見たVSヘルプスレッドの中には、このバグは「設計による」ものであると言っているものがあるため、修正されない可能性があります。ただし、簡単に実行できるようです。

とにかく、要約すると:

  • ソリューションエクスプローラーでライブラリプロジェクトを右クリックし、[プロパティ]をクリックします。
  • ライブラリプロジェクトが構築されていない「構成/プラットフォーム」ペアに切り替えます。
  • [構成のプロパティ]->[ライブラリアン]->[一般]を選択します。
  • 「出力ファイル」に「」と入力します(つまり、開き括弧、スペース、閉じ括弧)。
  • [OK]をクリックします。

無効になっているライブラリプロジェクトをビルドまたはクリーンアップすると、この回避策でエラーが発生することに注意してください。ソリューションを構築したばかりの場合、無効になっている構成ではスキップされるため、エラーは発生しません。

お役に立てれば!

ダニエル

于 2010-01-19T16:22:24.660 に答える
3

依存プロジェクトのリンカー/一般/リンクライブラリの依存関係プロパティをオフにして、関連する構成のリンカー入力にライブラリを配置することができます。

プロジェクト参照の有用性は低くなりますが、実行可能です。

于 2009-11-03T14:12:09.243 に答える
1

プロジェクトのプロパティ->一般で、構成タイプをアプリケーション/ライブラリではなくユーティリティに設定します。

于 2011-11-21T13:11:21.390 に答える
0

Visual Studioでは、各ビルド構成はプロジェクトのプロパティの独自のリストを保持します。必要なビルド構成にライブラリを追加するだけです。「すべての構成」に追加しないでください

于 2009-10-05T09:37:38.127 に答える
0

ソリューションを右クリックして、プロパティを選択します。ソリューションのプロパティページが表示されます。

右側のページで、[構成のプロパティ]>>>[構成]を選択します

ここで、[ビルド]というラベルの付いたチェックボックスをオンにすることで、[デバッグ]、[リリース]、および[すべてのビルドタイプ]のビルド構成を選択できます。

于 2009-10-05T09:38:25.633 に答える
0

メインプロジェクトで、[構成のプロパティ]->[リンカー]->[入力]に移動し、[特定のライブラリを無視する]というタイトルのセクションで、無視するライブラリを追加します(例:.lib)。別のlib/dllを無視することを除いて、他の構成に対してこれを再度実行します。

最後に、両方の構成で各プロジェクトをビルドしない場合は、[ソリューション]->[プロジェクトの依存関係]->[メイン/トップレベルプロジェクトを選択]->[ビルド/無視しないプロジェクト]のチェックを外します。

この方法には、必要に応じて各プロジェクトを手動でビルドできるという利点がありますが、構成を切り替えて、必要なlib/dllのみをビルド/使用できます。

于 2012-06-12T04:27:10.513 に答える