[Work/TechInfo/other]

まっさらな状態からのMSYS2+GCCでWindows上にC言語とC++の環境を整える / 2017-10-10 (火)

概要

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におけるユーザ環境変数設定方法は,

  1. Windowsメニューを右クリック→コントロールパネル→「大きいアイコン」にして→ユーザアカウント→一番左のメニューの下に「環境設定の変数」がある.
  2. 「"ユーザ名"の環境変数」と出てくるので,「新規」ボタン.
  3. 変数名「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プログラムのコンパイル

上記gccg++コマンドでコンパイルすると,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に書いておくと,日本語がデフォルトになり,かつスケスケ!になる.

[ ツッコミの受付は終了しています ]
この記事のリンク元