昨日の続きです。
4. x86環境の構築
昨日の冒頭でも書きましたが、gcc-4.x では x86上で Qt/E アプリをデバッグするためのシミュレータ(?)環境である qvfb 用のバイナリが、コンパイルできませんでした。
おそらく、gcc-2.9x の環境を作ればコンパイルできるのでしょうが、ちょっと手間なので、別の方向で逃げることにしました。
それは、Qt3アプリとして作ってしまうことです。
zaurusのQt2とQt3は上位互換ですが、Qt4からは互換性がないらしいので、Qt 3アプリとしてホスト上である程度作ってしまい、Qt/E用にビルドするときは一部のクラスをQt/E用のクラスに入れ替える方法を取りました。
Qt 環境と Qt/E 環境は細かい所は違うのかもしれませんが、Qt の QApplication を QPEApplication に置き換えれば大体は動くようです。というか、QApplication と QPEApplication を入れ替えれば動くように作ります。
最終段階では qvfb が使えた方がいいのでしょうが、それはその時に考えることにします。
ということで Qt3の環境を整えます。
どれから入れたかは忘れてしまいましたが、今現在Qt3 関係で入っているパッケージは以下のとおりです。
- libqt3-compat-headers
- libqt3-headers
- libqt3-i18n
- libqt3-mt
- libqt3-mt-dev
- qt3-apps-dev
- qt3-designer
- qt3-dev-tools
- qt3-dev-tools-compat
- qt3-dev-tools-embedded
- qt3-doc
- qt3-examples
aptでいくつかインストールすれば依存関係でほとんどインストールされてしまうと思います。
これでQt3アプリをビルドする環境が整いました。
5. x86(Qt3), ARM(Qt/E) 共通のソースで開発
Qt3 と Qt/E ではコンパイラもMakefileも異なるので、プロジェクトファイル (*.pro ファイル) を分けることで切り替えます。
例えば、hoge というディレクトリにソース一式が入っており、 hoge というアプリを作るとします。
このとき、Qt3 用には、
$ qmake-qt3 -project $ qmake-qt3 $ make
で プロジェクトファイル hoge.pro、メイクファイル Makefile を作成し、ビルドします。
ARM環境では、プロジェクトファイルの作成に progen、Makefile の作成に tmakeを使います。
$ progen -o hoge-arm.pro $ tmake -o Makefile.arm hoge-arm.pro $ make -f Makefile.arm
これでプロジェクトファイル hoge-arm.pro、メイクファイル Makefile.arm が作成され、ビルド時には make に -f オプションを指定することで、Makefile.arm を使ってビルドします。
実際には、progen で作成した pro ファイルに、
DESTDIR = ./ INCLUDEPATH += $(QTDIR)/library DEPENDPATH += $(QTDIR)/library TARGET = hoge LIBS += -lqpe
を追加する必要がありますが、流れは上記の通りです。
QApplication と QPEApplication は #ifdef で切り替えます。
Qt/E用のビルドでは QWS が define されるようなので、#ifdef QWS で Qt/E と Qt3 を判断します。
こんな感じで
#ifdef QWS #include <qpe/qpeapplication.h> #else #include <qapplication.h> #endif #include "gmap.h" int main(int argc, char **argv) { #ifdef QWS QPEApplication app(argc, argv); GMap *win = new GMap(); app.showMainWidget(win); #else QApplication app(argc, argv); GMap *win = new GMap(); app.setMainWidget(win); win->show(); #endif return app.exec(); }
当分はこの方法で開発を進めてみようと思います。