MinGW(gcc) の Windows へのインストールと使い方
Windows で C, C++ 言語のコンパイラー である gcc(g++) を使いたい場合は MinGW をインストールします。 今回はこの MinGW のインストール方法と gcc の使い方について説明します。
MinGW とは
MinGW は "Minimalist GNU for Windows" の略で、ネイティブの Windows アプリを開発するために必要な最小限の環境を提供するツールセットです。ここでネイティブのアプリというのはコンパイルして作るマシン語の実行ファイルで、 C, C++ 言語だけではなく、 Ada, Fortran, Objective-C といった言語のコンパイラーを使うこともできます。 因みにネイティブでないものといえば、 仮想マシン(VM)やスクリプト言語のアプリですが、 違いについて詳しく知りたい方は以前の記事を見て下さい。 なお、 Windows で gcc のような GNU ツールを使いたい場合には Cygwin という手もあります。
Cygwin も GNU やオープンソースのツールを使うための環境を提供するツールセットというのは同じですが、 POSIX に準拠したライブラリーやシステム環境を作った上でアプリを動作させます。 POSIX というのは Unix 系 OS の API やアプリの動作を規定した規格です。 これはいわば、 Windows 上に Linux を乗っける感じです。
これはこれですごいものなのですが、単に Windows 上でアプリを作りたいという時には大仰です。
MinGW はアプリのビルドに最小限のツールを集めたツールセットとして Cygwin から派生しました。
また、 Cygwin で開発する場合、 Unix のシステムコールの呼び出しなどをコードの変更なくそのままビルドできますが、そのかわりに作成したアプリは Cygwin のライブラリーが必須となり、 Cygwin 上で動作させなければなりません。
それに対して MinGW の場合、 デフォルトではサードパーティ製のライブラリーを何も使わず、 Windows のシステムランタイムのみ依存したアプリを作れるようになっています。
ダウンロード
インストールするためには MinGW のホームページからインストーラーをダウンロードします。
ホームページの [Download Installer] をクリックすると、 SourceFoge のページに飛び、ダウンロードが始まります。
インストール
ダウンロードロードしたファイル(mingw-get-setup.exe) は正確には mingw-get というパッケージ管理ツールのインストーラーです。 そのため、 GCC のインストールには次の手順を踏みます。- パッケージ管理ツールのインストール
- 管理ツールで GCC のパケージを選択してインストール
- 環境変数 PATH の設定
パッケージ管理ツールのインストール
インストーラー(mingw-get-setup.exe)を実行するとウィザードが表示されます。
基本的にデフォルトの設定のままで問題ありません。必要があればインストール先を変更するぐらいでしょう。
ただし、 Clang を使用するためにはデフォルトのインストール先から変更してはいけません。 mingw-get 自体はコマンドラインツールですが、それを GUI で使えるフロントエンドもついてきます。 最初のチェックはそれをインストールするかどうかです。
また、作成されるショートカットはその GUI フロントエンドのショートカットで、 gcc 等のショートカットではありません。ただ、何故か私が試した場合スタートメニューの方のショートカットは作成されませんでした。
パッケージのインストール
パッケージ管理ツールのインストールが終了すると自動的にそれが起動されます。 ここで必要なパッケージを選択して、インストールします。このパッケージ管理ツールはネットワーク対応で、 選択したパッケージをネットワークから取ってきてインストールしてくれます。

パッケージは次の中から選択します。
パッケージ | 説明 |
---|---|
mingw32-developer-toolkit | MinGW 自体の開発者用のツール群 |
mingw32-base | make などのビルドに必要な基本ツールセット |
mingw32-gcc-ada | Ada コンパイラー |
mingw32-gcc-fortran | Fortran コンパイラー |
mingw32-gcc-g++ | C++ 言語コンパイラー |
mingw32-gcc-objc | Objective-C コンパイラー |
msys-base | "Minimal SYStem" Cygwin の簡易版 bash と grep、 awk などの基本的な Unix ツール群のセット |
C および C++ 言語を使うだけであれば、 migw32-base, mingw32-gcc-g++ の 2 つで十分です。
後から欲しくなった場合も、前節で作成したショートカットや以下の実行ファイルから起動できるので、選択に神経質になる必要はありません。
- (インストール先フォルダー)\libexec\mingw-get\guimain.exe
選択後、実際にインストールする場合にはメニューの [Installation] → [Apply Changes] を実行します。

ダイアログが出てくるので、 [Apply] を選択するとインストールが実行されます。

環境変数 PATH の設定
インストールが完了したら、以下のフォルダーを環境変数 PATH に追加します。- (インストール先フォルダー)\bin
デフォルトであれば C\MinGW\bin
gcc の使い方
gcc には数多くの機能があります。 ここでは C, C++ 言語でプログラミングをする上で、最初に覚えておくべき使い方についてのみ説明します。なお、 C 言語の場合 gcc、 C++ 言語では g++ のコンパイラーを使いますが、 内部的には同じもので、使い方も一緒です。
コンパイル
プログラムを作成する場合、 以下の形式でコンパイルします。g++ [オプション] ソースファイル [...]
~/lang/cpp/sample $ g++ hello.cpp
hello.cpp : #include <iostream> int main() { std::cout << "Hello world!" << std::endl; return 0; }実行ファイルはオプションで指定しなければ、 a.exe のファイル名となります。
~/lang/cpp/sample $ ./a.exe
Hello world!
実行ファイル名は -o オプションで指定します。
また、 ソースファイルは複数指定することもできます。
~/lang/cpp/sample $ g++ -o hello.exe main.cpp hellofunc.cpp
オプション
基本的なオプションを以下の表に挙げておきます。オプション | 説明 |
---|---|
--help | ヘルプ(Usage)を出力 |
-o | 出力ファイル名の指定 |
-D | define 定義の追加 -DFOO と指定するとコード中で #define FOO と定義したのと同じになる。
|
-g | デバッグモードでのコンパイル デバッガー(gdb) でデバッグするのに必要な情報を付けて実行ファイルを作る。 |
-I | インクルードファイルの検索パスの追加 |
-l | ライブラリーの指定 |
-L | ライブラリーの検索パスの追加 |
-std | 規格の指定 |
インクルードファイル というのはヘッダーなどのファイルで、 先ほどのサンプルでは
iostream
がそれにあたります。
ただ、 iostream のような標準のヘッダーのパスは指定する必要はありません。別途インストールしたヘッダーや自作ヘッダーを使いたい場合に -I オプションを使います。 例えば、カレントフォルダーのヘッダーを使いたい場合には -I. と指定します。
ライブラリー とここで言っているのは静的ライブラリーといってコンパイル時に結合するライブラリーです。 例えば libm.a という数値演算用のライブラリーを使いたければ、 lib と .a をとって -lm と指定します。
~/lang/cpp $ g++ -lm mathsamp.cpp
こちらも標準のライブラリーはパスを特に指定する必要はありません。それ以外のところにあるライブラリーを使い時に -L オプションを使います。因みにライブラリーとしてよく聞く dll は動的ライブラリーといって、実行時に呼び出して使うのですが、 ちょっと扱いが違うので、今回は割愛します。
規格の指定というのは C++11, C++14 といった規格です。
C++ の言語仕様は長らくあまり変わっていなかったのですが、 C++11 で大きな機能追加があり、 C++14 でその補足的な機能追加がありました。それらの新しい規格で書きたい場合には -std のオプションで指定する必要があります。
オプション | 規格 | 備考 |
---|---|---|
-std=c++11 | C++11 | Ver. 5.1 以降ではデフォルト |
-std=c++14 | C++14 | |
-std=c++1y | 提案時代の C++14 | 将来は廃止予定 |
なお、現時点(2015-05-28)の GCC の最新版は Ver. 5.1 ですが、 MinGW の GCC は 4.8 と若干追いついておらず、 c++14 ではなく、 c++1y を使う必要があります。
Cygwin の説明で出てきた POSIX ですが、コマンドラインオプションの付け方にも規格があります。 また、 その上に GNU のスタイルガイドもあります。
-std など違反しているのも混じってますが、概ね gcc はその規格に則っています。UNIX 系のオプションの指定の仕方に慣れてない方は以前の記事が役に立つかもしれません。
環境変数
ライブラリー等をインストールした場合、毎回 -I や -L で指定するのは面倒です。 そのため、環境変数で検索用のパスを追加することができます。指定する場合には環境変数 PATH のように ;(セミコロン) で区切って複数追加できます。
環境変数 | 説明 |
---|---|
CPATH | C, C++ 言語共通のインクルードファイルの検索パス |
C_INCLUDE_PATH | C 言語のインクルードファイルの検索パス |
CPLUS_INCLUDE_PATH | C++ 言語のインクルードファイルの検索パス |
LIBRARY_PATH | ライブラリーファイルの検索パス |
オブジェクトファイルの作成
実際、アプリを作る場合にはソースファイルが大量になるのが普通です。 最後にそういう開発の さわり だけ説明しておきます。ソースファイルを指定すると一気にやってしまうのですが、内部的には以下の手順で実行ファイルを作成します。
- ソースファイルからオブジェクトファイル(.o)を作成
- オブジェクトファイルをリンカーで結合して実行ファイルを作成
~/lang/cpp/sample $ g++ -c hellofunc.cpp ~/lang/cpp/sample $ g++ -c main.cpp ~/lang/cpp/sample $ ls hellofunc.cpp hellofunc.o main.cpp main.o ~/lang/cpp/sample $ g++ -o hello.exe hellofunc.o main.o何故、こういった手順で行うかというと、修正後のビルド時間を短縮するためです。 例えば、 hellofunc.cpp を修正した場合、 そのファイルのコンパイルだけをして main.cpp をコンパイルすることなく、実行ファイルが作成できます。
通常、こういったビルド作業は手間なので Makefile というファイルにビルドのルールを書いて make でビルドを行います。 ただ、この Makefile を書く作業も大変なので、最近では Autogen のように Makefile も自動生成させるようなツールを使うようなことも多くなってきています。
- 関連記事
-
- 出力用シフト演算子(<<)のオーバーロード
- MinGW(gcc) の Windows へのインストールと使い方
- LLVM Clang の Windows へのインストールと使い方
- 可変長テンプレートを使った C++11 時代の可変長引数関数
- C++ のコピーコンストラクターと代入演算子
Facebook コメント
コメント
No title
調べてもCygwinやMinGWについての情報が少なかったので、このような記事は助かります。
Re: No title
確か小学生の時からプログラミングをやられている方ですよね。私も以前そちらにコメントをした記憶があります。
私の記事が役に立ったみたいで良かったです。
管理人のみ閲覧できます
No title
Re: No title
書き方がちょっと紛らわしかったようですので、今度から気をつけたいと思います。