プロジェクト ファイルの編成には 2 つの主要な規則があり、その後に多くのバリエーションがあるようです。
規則 1: 高レベル タイプのディレクトリ、プロジェクトのサブディレクトリ
たとえば、wxWidgetsプロジェクトは次のスタイルを使用します。
/solution
/bin
/prj1
/prj2
/include
/prj1
/prj2
/lib
/prj1
/prj2
/src
/prj1
/prj2
/test
/prj1
/prj2
長所:
- プロジェクトの依存関係がある場合は、単一のファイルから管理できます
- フラットビルドファイル構造
短所:
- test には独自のヘッダー ファイルと cpp ファイルがあるため、ライブラリではなく EXE ファイルの単体テスト アプリケーションを生成する場合、テストするアプリケーションのオブジェクト ファイルを含める必要があります。これには、推論規則を作成し、すべてのソース ファイルの相対パスを展開する必要があります。
- 別のソリューションでプロジェクトを再利用するには、ツリー構造から適切なファイルを抽出し、ビルド スクリプトを変更する必要があります。
規則 2: 高レベルのプロジェクト ディレクトリ、タイプ サブディレクトリ
たとえば、Wiresharkプロジェクトはこのスタイルを使用します
/solution
/prj1
/bin
/include
/lib
/src
/test
/prj2
/bin
/include
/lib
/src
/test
長所:
- プロジェクト自体はフォルダー内に自己完結型であるため、移動や再利用が容易になります
- ビルド ツールでより短い推論規則を使用できるようにします
- 階層的なビルド スクリプトを容易にします
短所:
- プロジェクト間に依存関係がある場合は、ビルド順序を管理するために、プロジェクト ディレクトリの上にビルド スクリプトのレイヤーを追加する必要があります。
現在、プロジェクトで規約 1 を使用していますが、これまでのところかなりうまく機能しています。現在、私は単体テストを (CxxTest を介して) 追加し、nmakeを使用して継続的インテグレーションへの移行を促進しています。規則 1 は、適切な nmake ファイルの作成に深刻な頭痛の種を引き起こしています。
私の主な要件/目標は次のとおりです。
ソリューション全体のビルド スクリプトを維持する労力のレベルを減らします。
ソリューション内のプロジェクトとそのビルド手順を他のプロジェクトから切り離します。
チェックアウト用のビルド スクリプトを使用して、コミットごとにメディア生成をリリースすることで、継続的な統合を促進します (もちろん、CruiseControl などの他のツールも活用します)。
追加のプロジェクトまたはソース ファイルの追加または削除を、開発者にとって可能な限り簡単にし、エラーの発生を最小限に抑えます。
だから私は尋ねます:
- これらの方法のいずれかの他の長所と短所はありますか?
- これらの慣習の 1 つだけを支持する明確な反対意見はありますか?