[[藤井のスタートページ]]

* はじめに [#qf404216]
Windows Program 開発のためのフリーのツールの一つとして
&ref(http://www.mingw.org/,MinGW - Minimalist GNU for Windows);
がある。この文書は、それを使うためのメモである。

MinGW は Windows 版の gcc/g++ を中心とした program package
(resource compiler も用意されている(windres又はwrc))であり、
その実行環境にはいくつかの選択肢がある。例えば
- Windows のコマンドプロンプトで頑張る
- Cygwin 環境下で行う
- MSYS 環境下で行う
- Dev-C++ で行う
- &ref(http://www.eclipse.org/,Eclipse); の CDT を使う

などがある。

gcc をコマンドプロンプトで使うだけなら、PATH に MinGW の
インストール先の bin (default では C:\mingw\bin )を付け加えておくだけでよい。
なお、Windows Programming 関連については以下の別ページも参照のこと。
- [[MinGWによるWindows Programming]]
- [[MinGWによる日本語Windows Programming]]
- [[MinGWによる Network Programming]]

** Windows 7 に関する追記 (2010年5月25日) [#x6c831c4]
Windows 7 で gcc/g++ をコマンドプロンプトで動かしてみた。
標準ユーザでも問題無さそうであることを確認した。

日本語(SHIFT_JISコード)ソースファイルも扱いたかったので、
gcc-core と gcc-g++ は 3.4.5-20060117-1 にした。
パッケージのバーションは
- binutils 2.20.1
- gcc-core 3.4.5-20060117-1
- gcc-g++ 3.4.5-20060117-1
- runtime-dll 3.18
- runtime-dev 3.18
- w32api-dev 3.14

を使った。いずれも tar+gzip されているものをとってきて tar zxvf で
USB メモリに展開。インストール先 Windows 7 機に管理者アカウントで
ログオン。その USB を Windows 7 機に差して、\mingw フォルダ以下を
ごっそり C:\mingw に copy。その後、
- コントロールパネル
- システムとセキュリティ
- システム(右側ペインにある)
- システムの詳細設定(左側ペインにある)

と選んで「詳細設定」タブで「環境変数」を選んで、システム環境変数の
PATH に C:\mingw\bin を追加。これで完了。

 g++ -finput-charset=CP932 -fexec-charset=CP932

で SHFT_JIS の日本語も大丈夫("機構" の文字列も大丈夫)。 
で SHFT_JIS の日本語も大丈夫("機構" の文字列も大丈夫)。

なお、インストールしなくとも、標準ユーザで USB に置いた
まま PATH だけを通してもうまくいった。例えば、USB メモリが
ドライブ D: だとすると、コマンドプロンプトに入ったら、
 SET PATH=D:\mingw\bin;%PATH%

とすればよい。

**参考リンク [#j48c20cb]
- http://www2.atwiki.jp/ccw/

* 文字コード問題 [#mea1588c]
文字コードはやっかいな問題である。WindowsNT系及びCE系は
base が Unicode (UCS-2LE)
なので、文字列 literal などは、
その文字コードで program を書きたいところだが、これが難しい。
現在(2006年1月6日)gcc 3.4.2 (mingw-special) で動かしているが、
文字コード指定がなかなかうまくいかない。

** (26-May-2010)追記 [#f409a484]
gcc/g++ の option -finput-charset、-fexec-charset だが、
3.4.5-20060117-3 ではうまくいかない。どうも iconv が
link されていないらしい。3.4.5-20060117-1 の方はうまくいく。


** Shift_JIS [#a9def330]
とりあえず、日本語を通したければ Shift_JIS で書いて、
 gcc -finput-charset=CP932 -fexec-charset=CP932 infile.c
とすれば、Shift_JIS base のプログラムはできる。0x5C 問題
も無いみたいだ。
(だがなぜか、CP932 の代わりに SJIS と書いても SHIFT_JIS と
書いても MS_KANJI と書いてもうまくいかない -- iconv で受け付ける
ものは OK のハズなんだが、、)。

** UTF-8 [#l4021273]
gcc の入力の文字コードの default は UTF-8 とのことなので、
「メモ帳」を使って、UTF-8 で保存して
 gcc -fexec-charset=CP932 infile.c
としてもうまくいかない。これは、「メモ帳」が UTF-8 のファイルで
あることを示すために、先頭に 0xEF 0xBB 0xBF の3バイトを付加する
ためで(これは幅0のスペース文字)、この3バイトを除去してやれば
上記記述でうまくいく。

** _T マクロの利用 [#v4978987]
Windows programming をやったことがある人間なら知っていると思われる
が、95系と NT系、CE系のソースを共用させる目的で _Tマクロをよく
利用する。例えば

 #ifdef UNICODE
 #define _UNICODE
 #endif
 #include <windows.h>
 #include <TCHAR.H>
 
 int WINAPI WinMain (HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     PSTR szCmdLine, 
                     int iCmdShow) 
 {
   TCHAR msg[] = _T("高エネルギー加速器研究機構の藤井です");
   TCHAR title[] = _T("Hello Title");
 
   MessageBox (NULL, msg, title, MB_OK);
   return (0);
 }

てな具合である(機構の構の字が問題の 0x5C を含んでいるので
こういう例題にしてある)。ここで、MessageBox関数は UNICODE が
定義されていれば WideCharacter版が、そうでなければ SingleCharacter版が
使われる。というわけで、UNICODE を定義して compile すれば
NT、CE系の実行イメージが、そうでなければ 95系でも使えるイメージが
作られる。これを Shift_JIS で whello.c として保存したとすると、
NT、CE系の実行イメージを作るには
 gcc -DUNICODE -finput-charset=CP932 -fexec-charset=UCS-2LE whello.c -mwindows

とすればよい。


* MSYS [#l04afe7f]
MSYS は MinGW を利用するための console 型インターフェース(shell)
で UNIX 系の script などを使えるようにする最小システムとして
提供されている。
MinGW で開発したいのだが Cygwin を install するのはどうも
大げさすぎるという場合に Cygwin の代替として使うという位置づけらしい。

配布は Winodows のインストール用実行イメージで行われているので、
インストールは簡単である。MinGW より先にインストールすることが
推奨されているが、後からでも(多分)特に問題ない。ただし、
''絶対に MinGW の bin と MSYS の bin を混ぜてはいけない''。

MSYS には gzip や tar が含まれているので、後は必要な tar-ball を
取得して展開し、インストールすればよい。MinGW に必要最低限の
tar-ball は
- mingw-runtime
- w32api
- binutils
- gcc

だそうである。これらは全部 MSYS とは別のフォルダ
(例えば C:\mingw とか)か MSYS 配下の mingw に
インストールする。
何度も言うが、
''間違っても MinGW の bin と MSYS の bin を混ぜてはいけない''。

MSYS 配下の mingw にインストールしない場合は
/etc/fstab を作って、その中で指定しておく。
/etc/fstab の例が /etc/fstab.sample として存在しているので、
書き換えは容易である。

ここまで出来れば、MSYS の
Console で hello world 程度の実行イメージは UNIX 系の通常の方法で出来る。
ただし、default で作られる実行イメージファイルは a.out ではなく、a.exe
である。

* Dev-C++ [#bd6cf2ce]
MinGW を利用するためのGUIを持つIntegrated Development Environment (IDE)ツール
としては
&ref(http://www.bloodshed.net/devcpp.html,Dev-C++);がある。このDev-C++の
フルパッケージにはMinGWやデバッガ−のGDBも含まれているらしい
(2006-01-04現在:Dev-C++ 5.0 beta 9.2 (4.9.9.2))
ので、これをインストールしてみる。

** 日本語化について [#xca8c7b6]
元の Dev-C++ は日本語が問題となる。本体もフォントの設定などで文字化けを
起こす。これに対しては
&ref(http://dev-cpp-jp.sourceforge.jp/,DevC++-JPプロジェクト);
で日本語対応パッケージを配布している。多国語対応の programming を
するつもりなら、こちらの方がよいかも知れない。

ただし、筆者の場合、すでに英語版としてインストールしてしまった後だった
ので、
ftp://www.cs.tohoku-gakuin.ac.jp/pub/windows/IDE/Dev-C++/How2Setup.html
の方法で日本語化することにする。

** Dev-C++ を使ってみて [#k7c2e18d]
少し使ってみたが、β版ということもあるだろうが、まともに使おうとするには
ちょっと今ひとつの感がぬぐえない。特にプロジェクトへの新規作成で間違えた
ファイル名を入れた後、削除しようとしてもまともにいかない。
一度 Dev-C++ を終了して手でプロジェクトファイルを編集するはめになった。
しかも、それだけではダメで、一度プロジェクトに記載されているものを
全部はずして、もう一度プロジェクトへ挿入し直さないと、正しい Makefile.win が
作られない。
また、ソースを修正した後 save せずに compile すると前の
ファイルが compile される。つまり見えているものと compile されるものが
違う状態になる。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS