unoh.github.com

IDEでマルチプラットフォームなGUIアプリを開発する環境構築のメモ (C++ & wxWidgets)

2008-09-26 05:58:56 +0000


gotandajinです。




なにかGUIアプリケーションを作ろうとした時、一番手軽に手を出せる開発環境はVisual Studioあたりかなぁと思われますが、Visual Studio は基本的にWindows専用です。Javaを使えばプラットフォーム間の差異を吸収して、同一ソースでWindows、Mac、Linux などの複数のOSで動くGUIアプリを作れますが、他の選択肢としては、開発言語をCやC++で、マルチプラットフォームなGUIフレームワークを利用しての開発、なんかが挙げられます。マルチプラットフォームなGUIフレームワークを使えば、Javaと同様に同一ソースで複数のプラットフォーム用のGUIプログラムが作成できます。こちらはJavaとは違い、オブジェクトコードとして生成できるのが特徴です。




代表的なマルチプラットフォームGUIフレームワークにはQT(キュート)やwxWidgetsが挙げられますが、昨今一番隆盛なのはたぶんQTの方です。こちらはSkype、Google Earth、Operaなど、稼動実績に有名どころが集まっているのですが、一番手軽に使えるオープンソース版でもGPLの制限がかかります。GPLより緩く使いたい場合は、ライセンス料を支払う必要があります。




一方、wxWidgetsは成果物のバイナリをほぼ自由に配布できるフレームワーク
(http://www.wxwidgets.org/about/licence3.txt 参照) なので、手の出し易さではこちらの方が上と思われます。現在の最新版が2.8.9で更新日時が2008/09/22 、一つ前のバージョンの更新日時が 2008/6/28 なので、割と継続して更新もされています。
http://wxwidgets.info/




今回はwxWidgetsとEclipseなどのIDEを連携させたマルチプラットフォームなGUIアプリ開発環境の構築について書いてみようと思います。また、ここではプログラムをビルドする環境はWindows XP、開発言語はC++ です。



とりあえずまずはC++のコンパイラをインストールする



WindowsでC++のソースをコンパイルしようとした時、手段はVisual C++、Cygwin、Boraland C++ Builder など色々ありますが、ここではMinGWとMSYSを使うことにします。MinGWは、Windows用に移植されたGCCを使うための環境です。また、MSYSはUNIX風なCUI環境としてMinGWを補うツールです。




MinGWとMSYSのインストールについてはここでは割愛します。
http://www.knatech.info/Dev-mingw-install.html

ここの説明が分かりやすいのでご参照ください。




wxWidgets(wxMSW)をインストールする




http://www.wxwidgets.org/downloads/#latest_stable


このwxWidgetsのページからwxMSWのパッケージをダウンロードします。wxMSWはインストーラの形式で配布されています。wxMSWというのは、wxWidgetsのWindows環境用のパッケージです。LinuxのGTK環境用であればwxGTK、Mac環境用であればwxMacを使用します。




wxMSWのインストーラをダウンロードしたら実行し、上でインストールしたMSYSの、homeディレクトリの下層にファイルを展開します。(現在の最新版は2.8.9)



wxMSWinstall
wxMSWinstall posted by (C)フォト蔵
(筆者の場合)


ファイルの展開が終わったら、MSYSから、たった今展開したwxWidgets-2.8.9のディレクトリにcdで移動し、./configureで makefileを設定した後、makeでコンパイル、make install でwxWidgetsをインストールします。



$ pwd
/home/gotanda  (筆者の場合)
$ ls
wxWidgets-2.8.9
$ cd wxWidgets-2.8.9/
$ ./configure --disable-shared --disable-threads --enable-monolithic --enable-unicode
$ make
$ make install


これでインストールできるはずです。




./configure 以下はけっこう時間がかかります。特にmakeではスタティックリンクライブラリを大量に生成するのでなかなか終わらないです。スペックの低いPCだと数十分かかるかもしれません。




./configure 時のオプションの詳細についてはここでは割愛します。

以下参考にさせて頂いたサイトです。


http://0xcc.net/pub/uu-2004-08/

http://www.nslabs.jp/wxwidgets-install.rhtml




サンプルプログラムをコンパイルしてみる。



インストールが終わったらちゃんとGUIアプリを作成できるか試してみます。




test.zipにサンプルプログラムを用意しました(簡単なテキストエディタプログラムです)。解凍したら表示されるtestディレクトリをmsysのhomeの下層ディレクトリに置いてください。




MSYSから

$ pwd
/home/gotanda (筆者の場合)
$ ls
test
$ cd test


で、testディレクトリに移動し、

g++ -c TestApp.cpp TestFrame.cpp `wx-config --cppflags`
g++ -o test.exe TestApp.o TestFrame.o `wx-config --libs`


でコンパイル&リンクします。これでtest.exeが生成され、正常に実行できればwxWidgetsのインストールに成功しています。



test.exeの起動
test_editor
test_editor posted by (C)フォト蔵


wx-config --cppflags というのはコンパイル時のオプションを吐くコマンドで、wx-config --libsはリンク時のオプションを吐くコマンドです。バッククオートで囲ってg++のオプションとして渡しています。




なお、GUIをデザインするためのRADツールにはwxGladewxFormBuilder などがあります。
ここではwxFormBuilderを使ってみました。




IDEからwxWidgetsを使う




やっとwxWidgetsを利用できるようになりましたが、毎回MSYSからコンパイルするのは面倒なのでwxWidgetsのプロジェクトをIDEからビルドできるように設定してみます。wxWidgetsのインストールについての資料はウェブ上でたくさん見つかるのですが、IDEから使う場合についての記述は意外となかったので、これからやろうとしている方々のお役に立てれば幸いです。




IDE(統合開発環境)はプログラミングに必要なツール(ソースエディタやコンパイラなど)を一つのインターフェースからまとめて使えるようにしたり、makefileを自動生成してくれたりと色々便利ですが、種類も色々あります。ここではEclipse CDT、NetBeans の場合について載せておきます。



Eclipse CDT の場合




EclipseはJava用の統合開発環境ですが、プラグインを入れることでC++やPHPの開発にも使えます。
ここではC++の開発ができればよいので、
http://www.eclipse.org/downloads/
から、Eclipse IDE for C/C++ Developers をダウンロードして使ってみました。versionは3.4.0でした。




まずはプロジェクトを作ります。
プロジェクトというのは、1つのプログラムを生成するために使うソースや設定などをひとまとめにしたものです。メニューのFileからNew→C++ Project と進み Project Name に適当な名前を入力したらFinishを押します。




次にwxWidgetsを利用できるようにプロジェクトを設定します。
MSYSからコンパイルする時は、`wx-config --cppflags`のようなコマンド置換によるオプションの生成ができたのですが、どうもEclipse CDT からビルドする際バッククオート(`)がちゃんと評価されないようでうまくいかなかったので、wx-config --xxxで吐かれるオプションをプロジェクトの設定に直書きしてしまい、なんとかビルドできるようにしました。




最初に、コンパイル時の設定をします。 wx-config --cppflags で吐かれるオプション

-I/usr/local/lib/wx/include/msw-unicode-release-static-2.8
-I/usr/local/include/wx-2.8 -D__WXMSW__


を、C:ドライブからのフルパス表記に変えて、それぞれ設定します。




メニューのProjectからProperties→C/C++ Build→Settings→Tool Settings → GCC C++ Compiler と進み、
PreprocessorのDefined Symbolに

__WXMSW__

を、

DirectoriesのInclude Paths(-I)に


C:/msys/1.0/local/lib/wx/include/msw-unicode-release-static-2.8


C:/msys/1.0/local/include/wx-2.8


を追加します。


cdt_setting1
cdt_setting1 posted by (C)フォト蔵



そして、リンク時の設定です。wx-config --libs で吐かれるオプション

-L/usr/local/lib   -Wl,--subsystem,windows -mwindows /usr/local/lib/libwx_mswu-2.8.a -lwxregexu-2.8 -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lwxzlib-2.8 -lrpcrt4 -loleaut32 -lole32 -luuid -lwinspool -lwinmm -lshell32 -lcomctl32 -lcomdlg32 -lctl3d32 -ladvapi32 -lwsock32 -lgdi32

を、コンパイル時の設定と同様、C:ドライブからのフルパス表記に変えてそれぞれ設定します。




メニューのProjectからProperties→C/C++ Build→Settings→Tool Settings → MinGW Linker と進み、
Libraries の Libraries (-l) に

wx_mswu-2.8 wxregexu-2.8 wxexpat-2.8 wxtiff-2.8 wxjpeg-2.8 wxpng-2.8 wxzlib-2.8 rpcrt4 oleaut32 ole32 uuid winspool winmm shell32 comctl32 comdlg32 ctl3d32 advapi32 wsock32 gdi32

を1つずつ追加、

cdt_setting2
cdt_setting2 posted by (C)フォト蔵


Librariy search path (-L) に
C:/msys/1.0/local/lib

を追加、

Miscellaneous の Linker Flags に
-Wl,--subsystem,windows -mwindows

を追加します。

これで設定は完了です。




最後にビルド、GUIアプリの生成です。
メニューのFiles→New→Source Folder で左側の Project Explorer にソースフォルダが新しく生成されるので、そこに先ほどのtestプログラム(簡易テキストエディタ)のソースファイル4つをpasteします。

eclipse build
eclipse build posted by (C)フォト蔵

そして、メニューのProject→Build Project でビルドに成功するはずです。




NetBeans の場合




NetBeansもEclipse と同じような統合開発環境です。NetBeansでもwxWidgetsを利用できるようにしてみましたが、Eclipse CDT の場合とほとんど同じなので画像だけ載せておくことにします。



netbeans_setting1
netbeans_setting1 posted by (C)フォト蔵

netbeans_setting2
netbeans_setting2 posted by (C)フォト蔵




・・と、こんな感じで、IDEとwxWidgetsを組み合わせて、C++でマルチプラットフォームなGUIアプリを開発できるようになりました。