« 進捗記録 2014.3.18 | トップページ | MemoryBarrierとはなんぞや »

2014年3月18日 (火)

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とはなんぞや »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/2011805/55418507

この記事へのトラックバック一覧です: MinGW + Qt5 + Cygwin:

« 進捗記録 2014.3.18 | トップページ | MemoryBarrierとはなんぞや »

無料ブログはココログ
2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31