Qt4 on Windows with Mingw/Cygwin
何度も話に上っては、ごにょごにょと消えてる気がする。オレもやっては消していた。QtをMingwやCygwinで使う設定。この組み合わせ、どうにも対応が半端なんだよなあ。面倒だからメモしといたのでここにもメモして置く。
まずQt入れる。インストーラで入れる。MinGWも入れるかと言われたらYesと答える。Cygwin gccで-mnocygwinだとなんでかX11関係がオンになってしまってリンカでこける(自前クラスを作らなければこけないけど)。のでMinGW gccを使う。
入れたら以下の設定をスクリプトに入れておく。
export MINGW_IN_SHELL=1 export QTDIR='d:/Qt/4.x.y' export QMAKESPEC=win32-g++ export PATH=/d/MinGW/bin:/d/Qt/4.x.y/bin:$PATH
CygwinでもMinGWでも、QTDIRはMinGW形式(というのか、ドライブレター+スラッシュ)で書く。MINGW_IN_SHELLが無いとqmake -unixしても出力されるMakefileが腐る。PATHはそれぞれに合わせて。
で、この設定を読み込んでやればCygwinでもMinGWでも大体うまく行くが、qmakeを通すとmoc.exeのパスだけはWindowsのままになる。${QTDIR}/mkspecs/win32-g++/qmake.confをいじってもいいが、手元のfoo.proに
win32-g++ { QMAKE_MOC = $$(QTDIR)/bin/moc.exe }
と書けば、どこでも使える。$$()は環境変数を読み込む。
それでもこけるときは一度QTDIRでconfigure -releaseを実行してqmakeだけ作り直すと、直るときがある。
ひっさしぶりにC++書いたらコンストラクタ書くだけで疲れた(笑)。
class FooBar { public: FooBar(); }; FooBar::FooBar() { // Do something } int main(int argc, char *argv[]) { FooBar *fooBar = new FooBar(); }
ふーふーばーばー言い過ぎです。