概要
2017年初頭現在では,一番簡単にWindows上にC言語の開発(学習)環境を整える方法が,Unixツール群であるMSYS2をインストールし,MSYS2のパッケージマネージャでgccを入れることである.(clangはまだ多少問題ありとのことでgccを使う.)
MSYS2とパッケージマネージャpacmanを使ったgccのインストール
MSYS2 installerページから,msys2-x86_64-201*(64bit版)もしくはmsys2-i686-201*.exe(32bit版)のどちらかを環境に応じて落として実行.(本記事では64bit版を扱う)
HOME環境変数の事前設定
Windows上の「ユーザ」環境変数HOMEを,自分のWindowsのホームディレクトリを表す「%USERPROFILE%」にしておく(しておかないと,Windowsのホームディレクトリとは独立したホームが作られるので厄介).Windows 10におけるユーザ環境変数設定方法は,
- Windowsメニューを右クリック→コントロールパネル→「大きいアイコン」にして→ユーザアカウント→一番左のメニューの下に「環境設定の変数」がある.
- 「"ユーザ名"の環境変数」と出てくるので,「新規」ボタン.
- 変数名「HOME」,変数値「%USERPROFILE%」を入れておく.
インストール場所
おそらくCドライブ直下が理想的なのだろうが,どこにでもインストールできる.(ただしシンボリックリンクを含んでいるとダメ)
作成されるショートカットの中身
スタートメニューには,「MSYS2 MSYS」,「MSYS2 MinGW 64-bit」,「MSYS2 MinGW 32-bit」の三つが登録されており,それぞれ,MSYS2をインストールした場所の「msys2_shell.cmd」に与えるオプションが違っており,起動時に別の環境変数を与える.
- 「MSYS2 MSYS」の実態は「msys2_shell.cmd -msys」
- 「MSYS2 MinGW 64-bit」の実態は「msys2_shell.cmd -mingw64」
- 「MSYS2 MinGW 32-bit」の実態は「msys2_shell.cmd -mingw32」
である.
MSYS2のパッケージマネージャシステム
pacmanというパッケージ管理コマンドが存在している.2017年年始時点では既に新しいバージョンなので,
$ pacman -Syu
pacman本体と全体の更新,
$ pacman -Sy
で,データベースの更新,
$ pacman -Su
で,インストール済みのパッケージを更新,
$ pacman -S <package_name>
で,指定したパッケージのインストールである.
64bit用MinGWのインストール
pacmanパッケージマネージャを使って,「base-devel」パッケージと,mingw-w64-x86_64-toolchain」パッケージを入れる.
$ pacman -S base-devel mingw-w64-x86_64-toolchain
で入るが,mingw-w64-x86_64-toolchainパッケージのインストールの途中でGCCが対応しているCやC++以外の言語についても入れるか訊いてくる.(base-develはデフォルト=allで全部入れてしまって大丈夫)
:: 16 のパッケージがグループ mingw-w64-x86_64-toolchain にあります: :: リポジトリ mingw64 1) mingw-w64-x86_64-binutils 2) mingw-w64-x86_64-crt-git 3) mingw-w64-x86_64-gcc 4) mingw-w64-x86_64-gcc-ada 5) mingw-w64-x86_64-gcc-fortran 6) mingw-w64-x86_64-gcc-libgfortran 7) mingw-w64-x86_64-gcc-libs 8) mingw-w64-x86_64-gcc-objc 9) mingw-w64-x86_64-gdb 10) mingw-w64-x86_64-headers-git 11) mingw-w64-x86_64-libmangle-git 12) mingw-w64-x86_64-libwinpthread-git 13) mingw-w64-x86_64-make 14) mingw-w64-x86_64-pkg-config 15) mingw-w64-x86_64-tools-git 16) mingw-w64-x86_64-winpthreads-git
以下のようにCとC++関係のものだけ入れる.
選択して下さい (デフォルト=all): 1 2 3 7 9 10 11 12 13 14 15 16
GCCの実行
MSYS2上で実行するプログラムのコンパイル
先ほどのショートカットから「MSYS2 MinGW 64-bit」(実態は「msys_shell.cmd -mingw64」) を起動して,
$ gcc -v
$ g++ -v
で動くかどうかを確かめる.
Windowsプログラムのコンパイル
上記gcc
やg++
コマンドでコンパイルすると,MSYS2環境の中でしか実行できない(MSYS2が提供するdllを必要とする)プログラムが生成される.WindowsのCMD.EXEで動作するツールや,WIN32APIなどのGUIを使うプログラムは,MSYS2環境に依存してはいけないので,mingwコマンドを使い,かつ静的(static)リンクを指定する.
「MSYS2 MinGW 64-bit」ショートカットからシェルを起動し,
$ /mingw64/bin/x86_64-w64-mingw32-gcc Cのファイル名.c -o 実行ファイル名.exe \
-static -static-libgcc
C++の場合は,
$ /mingw64/bin/x86_64-w64-mingw32-g++ C++のファイル名.cpp -o 実行ファイル名.exe \
-static -static-libgcc -static-libstdc++ --std=c++11
とする.(C++11の場合)
MSYS2の設計思想
上記のショートカットというかオプションで分かる通り,MSYS2は起動時のオプションで,
- 「MSYS2 MSYS」 : UNIX作業環境
- 「MSYS2 MinGW 64bit」 : 64bit向けバイナリを生成するコンパイラを利用する環境
- 「MSYS2 MinGW 32bit」 : 32bit向けバイナリを生成するコンパイラを利用する環境(後述)
と3つの状態を切り分けて使う,Windows用としては理想的な設計になっている.
Windows用32bitバイナリをコンパイルするためのmingwは,
pacman -S mingw-w64-i686-toolchain
でインストール可能である.
.minttyrc
msys_shell.cmdはminttyを呼んでいて,実際にユーザが触る端末エミュレータはminttyなので,ホームディレクトリ直下に.minttyrcという設定ファイルを作っておくとよい.
Transparency=high
Locale=ja_JP
Charset=UTF-8
BackspaceSendsBS=yes
上の内容を.minttyrcに書いておくと,日本語がデフォルトになり,かつスケスケ!になる.