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