多くのプロジェクトファイルとソリューションファイルを含むVisualStudio2010を使用しています。しかし今、私はProjectReferencesで少し依存関係地獄にいることに気づきました。
- プロジェクト
Simpleは静的ライブラリを生成します。 Fooに依存BarしSimple、静的ライブラリを生成します。- プロジェクトはDLL
Moduleに依存しFoo、DLLを生成します。 - プロジェクトはDLL
Module2に依存しBar、DLLを生成します。
したがって、依存関係ツリーは次のようになります。
Simple
|
____________/ \__________
| |
Foo Bar
| |
Module Module2
を使用すると、依存して自動的にリンクProjectReferencesすることができます。これは正常に機能します。ModuleFooFoo.lib
しかしModule、自動的にリンクする方法はありSimple.libますか?
それは可能だと思われます。 Moduleに依存しますFoo。これはに依存しますSimple。したがって、「私の参照と私の参照の参照の出力にリンクする」オプションがあるはずです。しかし、それを可能にするものは何も見つかりません。
「リンクライブラリの依存関係」オプションはそれを行いません。Foo.libでのみリンクし、未解決の外部シンボル(Simple.libで定義されているシンボル)に関するリンクエラーが発生します。
->および->参照trueに対して「リンクライブラリの依存関係」をに設定すると、との両方を使用するプロジェクトができるまで、最初は機能するようです。その設定は実際にはとの中に埋め込まれ、との両方を使用しようとすると「シンボルはすでに定義されています」というエラーが発生します。そして、それは正しいエラーです-私は実際には他のライブラリの中に入れたくありません。FooSimpleBarSimpleFooBarSimple.libFoo.libBar.libFoo.libBar.libSimple.lib
ProjectReferecefromModuleをtoに追加することはできますがSimple、を使用するすべてのプロジェクトに設定するのは面倒でFooあり、のカプセル化に違反していますFoo。 Moduleについて知る必要はありませんSimple。明らかに、リンカはについて知る必要がありますがSimple、ProjectReferencesに従うことでそれを理解できるはずです。
これが重要な理由は次のとおりです。メンテナンス中に Basic、静的libを作成し、にSimple依存する新しいプロジェクトが作成されたとしBasicます。ProjectReferenceここで、をSimple直接または別のProjectReferenceを介して持つすべてのプロジェクトを更新する必要があります(この例ではModule、 2つのプロジェクトのみModule2ですが、実際には数十です)。それは退屈です。
tl; dr依存関係の静的ライブラリに自動的にリンクする方法はありますか?