MinGW + Qt5 + Cygwin
少しだけWindows 64bitでの開発環境について書きます。
MinGW(4.8.1) + Qt5.2.1 + Cygwin (x64) で開発しています。MinGW, Cygwinのダウンロードについては多くの情報があるのでここでは書きません。Qtもインストーラがついているのでインストール自体は問題無いと思います。
開発環境としてはCygwinの端末上で行うのですが、C++コンパイラはMinGWのg++を使います。単純に考えるとg++コマンドへのパスを設定するだけなのですが、makeコマンドとしてはCygwinのmakeコマンドにはqmakeが生成するMakefileが対応していません。このため、MinGWでインストールされるmingw32-makeを用いる必要があります。
いろいろ試行錯誤(trial and error)した結果、make.shというシェルスクリプトを書くことにしました。内容は以下の様な感じです。
#!/bin/bash
/c/MinGW/bin/mingw32-make CC="c:/MinGW/bin/gcc" CXX="c:/MinGW/bin/g++" LINKER="c:/MinGW/bin/g++" $1
使い方は、以下です。カレントディレクトリにパスは通してはいけないので…ちゃんとカレントディレクトリを指定します。引数は、通常debugです。./debugの中に自動生成のソースファイル、オブジェクトファイル、実行ファイルが生成されます。
./make.sh debug
ちなみにCygwinの最新のmakeコマンドは、バージョン4.0です。
$ make -v
GNU Make 4.0
このプログラムは x86_64-pc-cygwin 用にビルドされました
Copyright (C) 1988-2013 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 以降
これはフリーソフトウェアです: 自由に変更および配布できます.
法律の許す限り、 無保証 です.
$ LANG=C make -v
GNU Make 4.0
Built for x86_64-pc-cygwin
Copyright (C) 1988-2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
MinGW(4.8.1)のmakeは3.82.90です。
$ LANG=C /c/MinGW/bin/mingw32-make -v
GNU Make 3.82.90
Built for i686-pc-mingw32
Copyright (C) 1988-2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
make 4.0を使うと以下のようなメッセージが表示され、makeできません。
$ make
Makefile:62: *** 複数のターゲットパターンです. 中止.
$ LANG=C make
Makefile:62: *** multiple target patterns. Stop.
と、ここまで書いて、ふと気づいたのですが…MinGWのg++コマンドへのパスが通してあったのですが、
そのように設定しておけば、普通に
/c/MinGW/bin/mingw32-make.exe debug
と実行するだけで、makeできました…ということはmake.shは要らないかも(うう…)。
ということで、make.shは削除することにしました。 (git rm make.shで削除)
.bashrcで以下のようにaliasすることにしました。
# for Qt
alias mmake='/c/MinGW/bin/mingw32-make'
source ~/.bashrc
で再読み込みさせると、
mmake debug
でmakeできました。'm'を1つ多く打つ必要はありますが、それくらいはいいでしょう。
当然ですが、Cygwinのg++より前にパスを設定する必要があります。
ちなみに私の環境変数PATHの要約は以下の通りです。
$ echo $PATH
/home/xxxxxxx/Bin /home/xxxxxx/Bin/win64 /c/Tools/develop/Qt/Qt5.2.1/5.2.1/mingw48_32/bin /c/MinGW/bin /usr/local/llvm/bin /usr/local/bin /usr/bin /c/Windows/system32 /c/Windows
重要なのはパスの順番ですね。
このパスの順番がおかしいとmakeできたコマンドを実行しようとしても、何も表示されない(No Message)で終了してしまいます。main関数に到達する前のスタートアップの時点で異常終了するためです。main関数にいくらデバッグ表示を入れても、うんともすんともいいません。
多分初心者だとコマンドがメッセージ無しで終了するので、どこが悪いのか分からずハマってしまいますね、多分。私もハマりましたが、googleさんで探しても日本語での情報が見つからず、英語のページを探しまわって、ようやくそれらしい原因が言及されているページを見つけました。「Qtをインストールしなおせ」とか「もっと基本からやり直せ」とか中々的を射た指摘を見つけるのに苦労しました。
パスはQt -> MinGW -> cygwin の順に設定しましょう。
(*) If you use both of cygwin and MinGW and Qt, check PATH environment variable.
PATH order : Qt -> MinGW -> cygwin
これらを調べるために、かなりの時間を費やしました。次に試す人の参考になればいいのですが…
あと参考ですが、ソースコードはUTF-8N, LF で記述してます。(まだ日本語入れていないのですが(^_^;)
つまり、以下の様なemacs用の設定をソースコードの先頭に入れてます。
// -*- mode: cc-mode; coding: utf-8-unix -*-
emacsを使う酔狂な方がどれくらいいるのか分かりませんが、ご参考ということで。
あ、あとソースコード公開の準備としてソースコードの整備をしていますが、一応gitで管理してます。公開する前に正式なリポジトリは作りますが、とりあえずプロトタイプの時点からソースコードを管理する癖を付けたほうがよいかと思います。バックアップがないと不安なので(^_^;
« 進捗記録 2014.3.18 | トップページ | MemoryBarrierとはなんぞや »
コメント