2012-03-28 9 views
7

複数のモバイルプラットフォームを対象とした複雑なC++コードベースがあります。我々は現在、(それらに基づいて4.2〜6.5生CEとモバイルの両方)のWindows CEアンドロイド(2.1+)、iPhone(4+)、ほとんどパダ(2.0+)を作業し、何が来る場合がありますC++/CXの新機能のうち、Windows Phone(8+)を追加する可能性があります。さらに、Win32のテスト版と、いくつかのコードを共有するWin64のサービスアプリケーション。私たちは既にLinux上で単体テストをコンパイルしようとしていました。他のLinuxプラットフォームでも動作するように、すでに質問がありました。複数のモバイルプラットフォーム用のビルドツール

現在、各プラットフォームのネイティブツールでコードをコンパイルしています。それらのそれぞれは、かなり複雑で、合理的にシングルクリックのビルドを実現するために、いくつかのハックがあります。そして、Badaのために、私たちは生産のためにやらなければならないサムスンの微調整されたEclipseの外でビルドを解決しませんでした。

これまでのところ動作しますが、メンテナンスの問題がますます増えています。現在のところ、Visual Studioのプロジェクトファイルやプレーンなメークファイルとは異なり、XCodeプロジェクトで手作業でファイルを追加/削除/名前を変更することはできず、MacOSのボックスとXCodeの経験は2人だけです(誰でもWindowsとVisual Studioを知っている)。私たちはまた、Badaのターゲット用のメイクファイルを作成する必要があります(これは一般的なGNUのツールチェーンなので、クロスコンパイルができるはずです)、アンドロイドビルドのいくつかの不具合を取り除く途中ではありません。 Cygwinの下でビルドするときの依存関係の処理、アリビルドスクリプトの上のいくつかのハック、マッサージのマントルとシェルの接着剤があります。

このような多様なプラットフォームの構築プロセスを統一する方法についてアドバイスを探しています。

  • iPhoneとBadaの実行ファイルとAndroidビルドのネイティブコンポーネントの作成は絶対に処理する必要があります(誰も別々にテストする3つのプラットフォームがないため)。
  • 複数の共有ライブラリ、1つのメインバイナリ、同じプラットフォーム用の1つのテストバイナリ、および一部のプラットフォームのみで構築された補助バイナリ(現在はWin32のみ)で構成される大きなプロジェクトを処理する必要があります。
  • バージョン管理システムからのバージョンといくつかのユーザー定義変数からビルド構成ヘッダーとJavaファイルを生成できなければなりません.18を実行し、さまざまな顧客に対してわずかに異なるビルドを数えているからです。
  • もちろん、自動的に依存関係(ヘッダーファイル)を処理し、一般に信頼できるものでなければなりません。他のもののために

私は不備の周りにハックする準備をしていますが、それは必要がありますので、私は明らかに、シェルダクトテープの量を維持し、最小限に唾をしたいと思います:

  • のことができるようにVisual Studio、Eclipse、XCodeと統合すれば、各環境でビルドがトリガされ、ビルド製品がそれぞれのターゲットにアップロードされ、そこでデバッガがアタッチされます。
  • JavaをビルドしてAndroid用のカスタムパッケージツールを呼び出すことができるので、Googleは過去2年間に二度変わってしまったAntビルドスクリプトをハックする必要はありません。ダウンロードした)。
  • さまざまなデータファイルをインストールし、ランダムなパッケージャやランダムな他のスクリプトやツールを呼び出すことができるので、あまりにも多くのシェルスクリプトと混在する必要はありません。

我々はこれまでに(多くの時間を持っていなかった、これまでに取得していないが、すぐに何かをする必要があります)とはまた、約SConsを考えCMakeをしようとし始めています。しかし、私はすでに数年前にSConsをWindows CE用にビルドしようとしましたが、Visual Studioのmakefile型プロジェクトを生成し、VS2005の組み込みプラットフォームでは動作しませんでした。 CMakeはネイティブmakefileを生成できますが、CEにはcustom, bit out of date, branchが必要です。だから、が見たいかもしれない他のツールであるか、またはこれらのツールで知られている障害のブロックであるかどうかを質問したいと思います。です。

アップデート:私はいくつかの場所やpixellightでAndroidのネイティブバイナリのための説明書も直接パッケージツールを呼び出してAPKを生成するためにcmakeのスクリプトを持っていることがわかりました。またthis shell scriptがそれを示しています。 iPhone usageがここに記載されているようです。

+0

vs android(http://code.google.com/p/vs-android/) – Asaf

+0

@Asaf:ありがとうございますが、私たちはまだVS2008に悩まされており、今アップグレードすることは価値がないようですお金。 VSはMacOSでは動作しないので、Windowsで動作するiPhone向けのコンパイラについては聞いたことがないので、iPhoneで私たちを助けないだろう。 –

+0

Macが* nixボックスになっていないのですが、VSでビルドして別のC++コンパイラを使うのはお勧めできませんか?とにかく、より多くのANSIにコードを調整する必要があるかもしれませんが、それはとにかくベストプラクティスです。 – baash05

答えて

4

同じCMakeビルドファイルを使用して、少なくとも私の個人的な経験で、少なくともWin32(VS2005)、Linux(ubuntu)、OS X(10.5.8 Leopard)のプラットフォーム間でプロジェクトを生成してビルドすることができます。アンドロイドアプリのビルドプロセスでCMakeを使用するプロジェクトは複数あります(例:http://code.google.com/p/android-cmake/)。これらすべてのオプションで、私はCMakeを良い選択肢と考えています。さらにCMakeは、configure.acとMakefile.acファイルの作成経験がある方が簡単です。

注:CMakeの仕組み:

  1. 開発者/メンテナはCMakefileを作成します。
  2. Builderはcmakeを実行し、CMakefileを使用してプラットフォーム固有のビルドファイルを生成します(linux makefiles/OSX makefiles/VSプロジェクトファイル)
  3. ビルダーはビルドコマンドを起動します。
+0

クロスコンパイルには、クロスコンパイル環境にCMakeを導入するツールチェーンファイルが必要です。[CMake Wiki](http://www.cmake.org/Wiki/CMake_Cross_Compiling)を参照してください。 [ios-cmake](http://code.google.com/p/ios-cmake)と[android-cmake](http://code.google.com/p/android-cmake/)があります。 iOSとAndroid用のツールチェーンファイルを提供しています。 –

2

CMakeが最適です。 CMake 2.8.11以降Windows CEは、そのまま使用できます。そのバージョンがリリースされるまで、CMakeのNightly Binaryを使用することができます。

+0

ありがとうございます。見る必要があります。私たちは現在、2.8.3に基づいているhttp://gitorious.org/~paroga/cmake/parogas-cmake.gitから得られたブランチを使用しています。 –

+0

私は現在、小さな問題が1つあります。ARMは常にARMV4Iであると仮定し、 '/ MACHINE:THUMB'を設定するべきですが、'/MACHINE:ARM'を持つ 'Pocket PC 2003(ARMV4)'のためにまだコンパイルしています。 –

+0

問題は回避するのが簡単ではないことに注意してください。/MACHINEフラグはCMAKE _ * _ LINKER_FLAGSにのみ表示されるので、古いバージョンでもいくつか修正する必要がありました。 –

関連する問題