[ 新規 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

開発TIPS/moc,uicのクロスコンパイル

差分表示


編集前の状態に戻します。
Qtアプリのセルフコンパイルの為に
ずいぶん前に作って使ってた気がするのですが、需要がありそうなのでまとめ。

* moc のクロスコンパイル

** moc.pro の書き換え

moc.pro を下記のように書き換えます。

- qteに含まれるソースをコンパイル対象から外す。
- 代わりにlibqteをリンクしてオブジェクトを作る。

 *** moc.pro	2001-03-31 01:09:40.000000000 +0900
 --- moc-e.pro	2004-02-12 13:17:15.000000000 +0900
 ***************
 *** 8,34 ****
   DEPENDPATH	= ../../include ../tools .
   OBJECTS_DIR	= .
   MOCGEN		= mocgen.cpp
 ! SOURCES		= $$MOCGEN		    \
 ! 		  ../tools/qbuffer.cpp	    \
 ! 		  ../tools/qcollection.cpp  \
 ! 		  ../tools/qcstring.cpp	    \
 ! 		  ../tools/qdatastream.cpp  \
 ! 		  ../tools/qdatetime.cpp    \
 ! 		  ../tools/qfile.cpp	    \
 ! 		  ../tools/qgarray.cpp	    \
 ! 		  ../tools/qgdict.cpp	    \
 ! 		  ../tools/qglist.cpp	    \
 ! 		  ../tools/qglobal.cpp	    \
 ! 		  ../tools/qgvector.cpp	    \
 ! 		  ../tools/qiodevice.cpp    \
 ! 		  ../tools/qregexp.cpp	    \
 ! 		  ../tools/qstring.cpp	    \
 ! 		  ../tools/qtextcodec.cpp   \
 ! 		  ../tools/qtextstream.cpp  \
 ! 		  ../tools/qutfcodec.cpp
 ! 
 ! unix:SOURCES	+= ../tools/qfile_unix.cpp
 ! 
 ! win32:SOURCES	+= ../tools/qfile_win.cpp
 ! 
   TARGET		= moc
 --- 8,13 ----
   DEPENDPATH	= ../../include ../tools .
   OBJECTS_DIR	= .
   MOCGEN		= mocgen.cpp
 ! SOURCES		= $$MOCGEN
   TARGET		= moc
 + LIBS += -L$(QTDIR)/lib -lqte

** コンパイル手順

- tmake
 $ tmake -o makefile moc-e.pro
- make
 $ make
- strip
 $ arm-linux-strip moc

* uicのクロスコンパイル


下記の手順を自動的に行うシェルスクリプトを書いてみました。
uicのソースディレクトリにこのスクリプトを置いて実行するとuicのバイナリが出来ます。

- [[build_uic.sh Download:build_uic.sh]]
** 追加で必要なファイルの用意

下記の2ファイルをカレントディレクトリにコピーしておきます。

- qdom.cpp
- qconfig.h

** qconfig.h の書き換え

カレントディレクトリにコピーした qconfig.h の中の
 #define QT_NO_DOM
という記述をコメントアウトし、DOMを有効にします。
 //#define QT_NO_DOM

** uic.pro の書き換え

uic.pro を下記のように書き換えます。

- qdom.cpp を SOURCES に追加。
- INCLUDEPATH の先頭にカレントディレクトリを追加。
- LIBS から -lqutil を削除。
- DESTDIR をコメントアウト。

 *** uic.pro	2001-06-12 20:31:44.000000000 +0900
 --- uic-e.pro	2004-02-12 13:11:32.000000000 +0900
 ***************
 *** 1,10 ****
   TEMPLATE	= app
   CONFIG		+= qt console warn_on release
   HEADERS		= uic.h ../shared/widgetdatabase.h ../shared/domtool.h ../integration/kdevelop/kdewidgets.h
 ! SOURCES		= uic.cpp ../shared/widgetdatabase.cpp ../shared/domtool.cpp ../integration/kdevelop/kdewidgets.cpp
   TARGET		= uic
 ! INCLUDEPATH	= ../shared ../util ../../../src/3rdparty/zlib/
 ! unix:LIBS	+= -L$(QTDIR)/lib -lqutil -L../lib
   win32:LIBS	+= $(QTDIR)/lib/qutil.lib
   DEFINES 	+= UIC
 ! DESTDIR		= $(QTDIR)/bin
 --- 1,10 ----
   TEMPLATE	= app
   CONFIG		+= qt console warn_on release
   HEADERS		= uic.h ../shared/widgetdatabase.h ../shared/domtool.h ../integration/kdevelop/kdewidgets.h
 ! SOURCES		= uic.cpp ../shared/widgetdatabase.cpp ../shared/domtool.cpp ../integration/kdevelop/kdewidgets.cpp qdom.cpp
   TARGET		= uic
 ! INCLUDEPATH	= ./ ../shared ../util ../../../src/3rdparty/zlib/
 ! unix:LIBS	+= -L$(QTDIR)/lib -L../lib
   win32:LIBS	+= $(QTDIR)/lib/qutil.lib
   DEFINES 	+= UIC
 ! #DESTDIR		= $(QTDIR)/bin

** コンパイル手順

- tmake
 $ tmake -o makefile uic-e.pro
- make
 $ make
- strip
 $ arm-linux-strip uic

* コメント

コメント等はこちらにどうぞ。

- 2004-02-15 (Sun) 01:37:37 ''[[yakty]]'' : moc,uicって書いてあったんでとりあえず両方ともクロスコンパイル手順を書いてみましたが、mocはdev-imgに入ってますねぇ…
- 2004-02-26 (Thu) 03:50:54 ''[[suzu]]'' : 素朴な疑問なんですが、セルフでuicが必要になる場面ってあるのでしょうか?配布ソースはuiファイルから変換済みでしょうし…。
- 2004-02-26 (Thu) 07:17:46 ''[[yakty]]'' : 私は自分のアプリをたまーにセルフでコンパイルする程度ですけど、必要になる場面はありますよ。tmakeで作成したmakefileだとmake cleanで.uiから生成したソースは消えてしまいますし。
- 2004-02-27 (Fri) 06:42:34 ''[[suzu]]'' : mocで作ったソースじゃなくてuicで作ったのが消えるんですか
- 2004-02-27 (Fri) 06:44:17 ''[[suzu]]'' : ええと、make cleanで消えるということは、uicもtmakeのルールに組み込んで、GUIの基底クラスは毎回クリアするということですか?
- 2004-02-27 (Fri) 06:45:23 ''[[suzu]]'' : QT開発始めたばかりなので、なにかおかしなこと言ってたらすみません(^_^;)
- 2004-02-27 (Fri) 09:30:04 ''[[yakty]]'' : progen -> tmake で作ったmakefileだと消えますよね?あ、もしかしてシャープの公開してるチュートリアルを参考にしてます?あれはやり方が良くないです…(^_^; 通常はGUI基底クラスのソースは直接編集せずに、基底クラスを継承したクラスを作ってそっちを編集するのが良いと思います。
- 2007-11-07 (Wed) 04:32:35 ''[[COOKIE]]'' : 整形Heavy metal<a href= http://info.iifree.net/vigra/site_map.html >vigra prescription online</a>   <a href= http://info.iifree.net/female-viagara/site_map.html >generic brand of viagara online</a>   <a href= http://info.iifree.net/viagara-female/site_map.html >where to buy viagara online</a>   <a href= http://info.iifree.net/vigra-pills/site_map.html >vigra online shop</a>   <a href= http://info.iifree.net/levitra-viagara/site_map.html >generic viagara online</a>   
[[#comment]]
 [[#comment]]


03969