2017-05-18 23 views
0

私は数百のVisual Studioソリューション(主にC++)に基づいた製品スイートを持つ組織で働いています。これらのソリューションの中には、他のソリューションで使用されるライブラリを生成するものや、複数のモジュールで共有されるヘッダーを含む共通の「インクルード」フォルダもあります。Visual Studioソリューションの依存関係

問題は、依存関係を明示的にどこにも記載しておりませんし、ビルドシステムが依存するモジュールが適切な時期に建てられ得る確実にするリニアビルド順序を指定することで、依存関係を解決することです。これはビルドシステムではうまくいきますが、多くの直接的および間接的な外部依存関係を持つコンポーネントを処理しようとすると、開発者は不利になります。たとえば、ライブラリープロジェクトや共有ヘッダーのいずれかを編集し、影響を受けるモジュールを事前に知っていなくても、そのモジュールをすべてビルドすることができます。もう1つのユースケースには、TFSから新しくプルを行い、システム全体を構築することなく最初に構築されたモジュールを持つモジュールを構築することが含まれます。

/大規模なプロジェクトを構築するための依存関係の生成を自動化することができる利用可能な任意のツール(複数可)しているがある場合、私は疑問に思って。私は、他のソリューションをカプセル化するいくつかの本当に大きなソリューションを作成することを検討しましたが、それは本当に扱いにくいと思われます。また、私は、開発者にエラーが発生しやすいように、特に大きなコードベースで、依存関係を手動で指定するという考えが嫌いです。私は数年前にsconsで作業し、ソースファイルを解析してすべての依存関係の依存関係を自動的に発見する方法を本当に気に入っていました。今日、Visual Studioソリューションで同じことをすることができるものはありますか?

これは私が解決しようとしている問題の大きさを強調するために必要Visual Studio: how to handle project dependencies right?

の複製ではありません。これは、非常に大きな既存のコードベースです。メインディレクトリには数百のサブフォルダがあり、それぞれにはVSソリューション(プロジェクトではない)が1つずつ含まれています。各ソリューションには、1つ以上のプロジェクトが含まれています。私が前に言ったように、私は解決策の中でいくつかのプロジェクト間の依存関係を確立しようとしていません。問題はそれよりはるかに大きい。私は、ソリューション自体(数百件)の間に依存関係を確立する方法を見つけようとしています。例えば、1つの解決策は、セキュリティのためのライブラリ、通信のためのライブラリなどを生成するいくつかのプロジェクトを含むことができる。例えば、通信ライブラリを使用する数十のソリューションが存在し得る。だから、本質的には、数百のノードと、おそらく何万というエッジを持つ、有向グラフを作成しようとしています。

+1

[Visual Studio:プロジェクトの依存関係を処理するにはどうすればいいですか?](http://stackoverflow.com/questions/14081002/visual-studio-how-to-handle-project-dependencies-right) – Swift

+2

CMakeを使用する... :) – Drop

+0

CMakeは多数の既存のVSソリューションをスキャンして依存関係を生成できますか? –

答えて

0

cmake(https://cmake.org/)を使用できます。それを使って、ビルドするライブラリとアプリケーションをいくつか指定することができます。設定が完了すると、プロジェクトを変更することができ、ビルドは依存プロジェクトを更新するだけです。また、Cmakeはビジュアルスタジオジェネレータも提供しているので、そのIDEを引き続き使用することができます。

あなたに可能disavantage、プロジェクト何それが連結されなければならないと、各プロジェクト(ライブラリまたは実行可能ファイル)のために、あなたが明示的に指定する必要があり、構成するために、ということと、それが含まれている必要がありますどのようなフォルダです。いくつかのグローバルインクルードとリンクを定義する方法がありますが、使用方法は問題によって異なります。

+0

これは、私が探していることを念頭において、可能なかぎり、可能な限り多くのソリューション間の依存関係の発見を自動化したいということを除きます。これは、数百万行のコードを含む非常に大きなコードベースです。このような状況で手動で依存関係を構成すると、コストが高くなり、エラーが発生しやすくなります。 –

0

VSは(ソースファイルを解析することによって)依存関係を追跡します。何かがあなたのVSプロジェクトの依存関係を自動的に設定することはできません。他のビルドツールでも、プロジェクトをリンクするために何らかの方法で指定する必要があります。A.exeB.libを使用する必要があります。

新しいVSバージョンを使用する場合は、単にexe/dllプロジェクトにlibへの参照を追加するだけです。手動でプロジェクトの依存関係を追加した場合は、それらをすべて削除する必要があります。特に静的なlibプロジェクトを互いに依存させないようにしてください。VSではこれを行うことができます(たとえば、あるライブラリのビルドで別の静的なlibが使用するいくつかのソースファイルが生成された場合など)。しかし、一般的にこれらのファイルには依存性がなく、VSがビルドを並列に構築することによって最適化できます。

たとえば、一般的には、何らかの種類のBase.lib、System.lib、Graphics.libを持つことができます。これらはすべてあなたのApp.exeのユーザーです。 System.libはBase.libのコードを使用し、Graphics.libはSystem.libおよびBase.libのコードを使用します。だから、当然のことながら、依存関係は明確で、あなたはVSでそれらを設定します。それは間違いです!このような場合は、これらの4つのライブラリを独立させる必要があります.App.exeだけがこれらすべてのライブラリに依存している必要があります(たとえば、これらすべてのライブラリへの参照が必要です)。 VSは、これらのプロジェクトの正しい依存関係が何であるか把握します。

Cmakeの場合:単にVSプロジェクトとソリューションを生成します.SSを使用すると、cmakeはそれ以上のVS処理を実行できません。

関連する問題