Qt4 on Windows with Mingw/Cygwin

何度も話に上っては、ごにょごにょと消えてる気がする。オレもやっては消していた。QtをMingwCygwinで使う設定。この組み合わせ、どうにも対応が半端なんだよなあ。面倒だからメモしといたのでここにもメモして置く。
まず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();
}

ふーふーばーばー言い過ぎです。