9

私はかなり長い間 Visual Studio を使用しており、主に C++ の開発を行っています。私はしばしば、複数のモジュール (プロジェクト) を含むソリューションを作成する必要がありました。たとえば、いくつかの.dllファイルで構成されたユーティリティ ライブラリです。

あるモジュール (A) が別のモジュール (B) を使用する必要がある場合、次の標準パターンがあります。

  1. 必要なヘッダーを含めます。
  2. B から出力ライブラリ ファイルをリンクします (たとえば、VS: Project Config -> Linker-> Input-> Additional Dependencies-> 'B.lib')。
  3. [オプション] 適切なビルド順序を設定します (したがって、B は A の前にビルドされます)。

最近、C# をいじり始めました。それは、エンジン用の GUI ベースのツールをいくつか開発することにしたからです ( C++ や Qt や wxWidgets などの外部ライブラリを使用するよりもはるかに簡単です)。C# では、そのような依存関係は「参照」を使用して設定されることを学びました。

ここに画像の説明を入力

このオプションが C++ プロジェクトにも適用できることを発見したとき、私は非常に驚きました!

実際、サンプル ソリューションを作成し、この方法で依存関係を設定した後、「リンカー入力」などの追加構成なしで、すべてが正常に機能していました。

私の質問は、このオプションが C++ プロジェクトに対して正確に何をするのかということです。私はすべての利益と潜在的なトレードオフに興味があります。

依存関係として設定された他のプロジェクトからのリンク出力が発生することは既に知っています。他に何か?おそらく、参照されているモジュール間の実行時の依存関係でしょうか? 生成された出力にどのように影響しますか?

4

1 に答える 1

14

もともとは、C++/CLI プロジェクトでのみ使用することを意図していました。そして、C# プロジェクトへの参照の追加とまったく同じことを行い、プロジェクトをコンパイルするために必要な .NET 参照アセンブリを選択します。

しかし、これは非常に多くの C++ プログラマーを混乱させ、一般的に有用なものを含むべきだと考えました。おそらく、「共通プロパティ」という見出しの下にあるためです。それについての多くの質問。

未完成のバージョンである VS2010 に早送りします。Microsoft プロジェクトが出荷予定日を過ぎた数少ないケースの 1 つです。バグリストを作成するために、さらに 6 週間の猶予が与えられました。しかし、それだけでは不十分でした。依存関係のリンクを容易にするはずの機能が、実際には実装されていなかったり、無効になっていたりしました。

そのため、VS2012 では、別の方法で Add Reference をネイティブ C/C++ プロジェクトにも役立つようにすることにしました。常にプロジェクト参照を選択します。それは静的ライブラリまたは DLL プロジェクトである必要があります。.lib ファイルを生成するもの。そして、その .lib ファイルをリンクするようにリンカーに自動的に指示します。.lib ファイルをリンカ コマンド ラインに追加するだけです。うまくいきます。

更新: VS2015 用に再度変更され、参照ノードが追加されました。右クリックして、別のプロジェクトへの参照を追加します。

于 2015-04-11T14:57:10.047 に答える