この質問は 100 回くらい聞かれましたが、完全には答えられなかったという印象があります。
私は小規模なプロジェクトに取り組んでおり、いずれ大きな 3 つの PC プラットフォーム (Windows、Mac、GNU/Linux) 向けにリリースされる予定です。幸いなことに残念なことに、現在のところ、開発の初期段階では 32 ビット Windows のみを対象としています。
コード レベルでは、適切なライブラリを選択すれば、クロス プラットフォーム開発は比較的簡単です。また、複数のプラットフォームでソフトウェアを構築するのは比較的簡単です。GYP または CMake の使用を検討しています。
問題は依存関係です。プロジェクトをビルドするには、次のものが必要です: SDL、SDL_image、SDL_ttf、iconv、libxml2、libxmlmm、sigc++、wxWidgets、glew、bullet、openALsoft、および後で追加される可能性があります。
これまでのところ、次の 3 つのオプションが見つかりました。
- ソースをチェックインし、プロジェクトの一部としてビルドします
- バイナリをチェックインする
- ソース ツリーの外部で依存関係を管理する
基本的にライブラリのフォークとカスタム ビルド システムを維持する必要があるため、最初の方法はやり過ぎのように思えます。
2 番目のオプションは、ターゲットが 1 つまたは 2 つのプラットフォームのみの場合に行うべきことのように思えます。しかし、32/64 ビットのバリアントを含むすべての異なるターゲットを数えると、これもまた、ほとんど管理できないものに膨れ上がり始めます。
3 番目のオプションは、環境によって異なります。開発者に依存関係を手動で処理させれば、すぐに眠ることはありません。すべての依存関係を構築して使用できるようにすることは、ほとんど不可能です。言うまでもなく、各開発者が正しいバージョンを使用していることを保証することはできません。
他の言語を見ると、問題の解決方法が異なります。npm、marvin、phing などのシステムでは、プロジェクト内の一部の構成ファイルのみを維持し、ツールは必要な依存関係を取得します。
依存関係を一元的に構築し、それらを zip/deb/rpm/whatever パッケージにパッケージ化し、リポジトリに配置することを考えていました。次に、各開発者は、ビルドする前に、自分のプラットフォームの依存関係をリポジトリにコピーします (ただし、チェックインはしません)。これは、できればビルド前のステップとして自動的に行われます。
特に、追加のビルド システムは必要ありません。私は周りを見回しましたが、私が望むことをリモートで実行できるのはIvyだけかもしれません. しかし、何かが欠けているか、Ivy が問題を完全に処理しすぎているかのどちらかです。この問題を解決する簡単な方法はありますか?
私は自分自身を構築するインチです。