MSYS2 MinGW GCC環境をつくる (その2)
  Windows, Linux, C/C++

MSYS2 MinGW GCC環境をつくる(その2)です。今回は、Eclipse CDTをインストールして簡単なプログラムがコンパイルできるところまで作業を進めます。

MSYS2環境を構築してMinGW gccコンパイラをインストールする方法については前回の記事を参照してください。

Eclipse CDTをダウンロードする

Eclipseは元々Java用の開発環境でしたが、 CDT(C/C++ Development Tooling)プラグインを追加することでC/C++開発環境としても利用することができます。

Eclipse公式サイトではあらかじめCDTプラグインが組み込まれているパッケージも配布されていますので、今回はCDTプラグインが同梱されているパッケージを利用します。

上記サイトからEclipse IDE for C/C++ Developers32 bitまたは64 bitをダウンロードします。

Eclipse CDTを任意のフォルダーに展開する

ダウンロードしたEclipse IDE for C/C++ DevelopersのZIPファイルを適当なフォルダーに展開します。以下、C:\eclipse-cpp-oxygen-2-win32-x86_64\eclipseに展開した前提で説明します。

eclipse.exeをダブルクリックして実行してみてください。PCにJava実行環境がインストールされている場合は、Eclipseのスプラッシュ・スクリーンが表示され起動が始まります。

上記のように“No Java virtual machine was found”というエラーメッセージが表示されてしまった場合は、PCにJava実行環境がインストールされていません。次のステップに進んでJRE(Java Runtime Environment)をダウンロードしてください。

JRE(Java Runtime Environment)をダウンロードする

EclipseはJavaで書かれたプログラムですので、Eclipseを実行するためにJRE(Java Runtime Environment)が必要になります。eclipse.exeが起動できなかった場合は、以下の内容に従ってJRE(Java Runtime Environment)をダウンロードしてください。

上記サイトにアクセスしてJREのDOWNLOADリンクをクリックします。

ライセンスに同意する場合はAccept License Agreementをチェックしてください。(ライセンスに同意しない場合はJREをダウンロードすることはできません。)

Windowsで利用できるJREは2つあります。

  • jre-9.0.4_windows-x64_bin.exe
  • jre-9.0.4_windows-x64_bin.tar.gz

拡張子が.exeとなっているのはインストーラー形式、拡張子が.tar.gzとなっているのはJREのファイル一式を単純に圧縮しただけの形式です。今回は.tar.gz形式をダウンロードします。

.tar.gzを展開する

すでに拡張子.tar.gzを展開できるツールをお持ちの方はjre-9.0.4_windows-x64_bin.tar.gzを展開して、jre-9.0.4フォルダーを取り出してください。

拡張子.tar.gzを展開するツールをお持ちでない方は、7-zipが便利です。

7-zipは様々な形式で配布されています。.zip形式で配布されているコマンドラインバージョンをダウンロードします。ダウンロードしたファイルを展開すると中に7za.exeという実行ファイルが入っています。これを取り出して適当なフォルダーにコピーします。(私はC:\tempにコピーしました。)

先程ダウンロードしたjre-9.0.4_windows-x64_bin.tar.gzも同じフォルダーにコピーします。

コマンドプロンプトを起動して展開したフォルダ(C:\temp)に移動してから次のコマンドを実行します。

コマンドプロンプト
c:\temp>7za e jre-9.0.4_windows-x64_bin.tar.gz

7za.exeeオプション付きで実行することで、.tar.gz形式を伸長して.tar形式にすることができます。

続いて次のコマンドを実行します。

コマンドプロンプト
c:\temp>7za x jre-9.0.4_windows-x64_bin.tar

7za.exexオプション付きで実行することで、.tar形式を展開して中のファイル一式を取り出すことができます。

これでjre-9.0.4フォルダを取り出すことができました。

このjre-9.0.4jreというバージョンなしのフォルダー名にリネームしてから、Eclipseを展開したフォルダーにコピーしてください。

eclipse.exeは同じ場所にあるjreフォルダーをJava実行環境として自動的に認識するようになっています。これでEclipseを起動する準備が整いました。eclipse.exeをダブルクリックしてください。

Eclipse起動

Eclipseのスプラッシュ・スクリーンが表示されてから、しばらく待つとワークスペースの場所を選択するダイアログが表示されます。

ワークスペースというのはこれから作成していくプロジェクト(プログラム)を保存していく作業場所フォルダーのことです。

次回以降、ワークスペースの選択を省略したい場合はUse this as the default and do not ask againにチェックを入れます。

Launchボタンをクリックすると起動処理が進み、Welcome画面が表示されます。

次回以降、Welcome画面の表示を省略する場合は、右下のAlways show Welcome at start upのチェックを外します。

右上のWorkbenchをクリックして作業開始です!

C/C++プロジェクトを作成する

Project Explorerの余白部分を右クリックしてNewProjectを選択します。

新しいプロジェクトを作成するウィザードが表示されるので、C/C++を展開、C/C++ Projectを選択してNextをクリックします。

C/C++プロジェクトのテンプレートを選択する画面が表示されます。ここではC++ Managed Buildを選択してNextをクリックしてください。(ここでMakefile Projectを選択すると上手くプロジェクトが構成できないことがあるようです。まだ Experimental(実験的)だからでしょうか…。)

プロジェクトの名前やタイプを設定していきます。

  • Project name に sample1 と入力します。
  • Project type として Makefile projectEmpty Project を選択します。
  • Toolchains として MinGW GCC を選択します。

最後にFinishをクリックします。

プロジェクトが作成されましたが、Empty Projectを選択したので中身は空っぽです。

Project Explorerに表示されているsample1プロジェクトを選択して、右クリック、NewSource Folderを選択します。

ソース・フォルダーを設定する画面が表示されます。Folder nameにsrcと入力して、Finishをクリックします。

プロジェクトにsrcフォルダーが追加されました。

ソースコードの作成

作成したsrcフォルダーを選択して、右クリック、NewSource Fileを選択します。

ソースファイルの作成画面が表示されます。Source fileにsample1.cppと入力して、Finishをクリックします。

srcフォルダーにsample1.cppが追加されました。

sample1.cppの中身はヘッダーコメントがあるだけです。

sample1.cppを編集して以下の簡単なソースコードを書きます。

sample1.cpp
#include <iostream> int main(int argc, char* argv[]) { std::cout << "Hello, World!!" << std::endl; return 0; }

注意
ソースコードを書いた直後はstd::coutの個所にエラーを示す赤い波線が表示されることがあります。しばらく待っていると、ヘッダーファイルiostreamの解析が完了して赤い波線が消えます。

Makefileの作成

次にプロジェクトをビルドするためのMakefileを作成します。

Project Explorerでプロジェクト名sample1を選択して、右クリック、NewFileを選択します。

File nameにMakefileと入力して、Finishをクリックします。

sample1プロジェクトにMakefileが追加されました。

まだ、Makefileは中身が空っぽのファイルです。Makefileを編集して以下の内容にします。

Makefile
TARGET=sample1 SRC_DIR=./src OBJ_DIR=./obj BIN_DIR=./bin CC = gcc CXX = g++ CPPFLAGS = CXXFLAGS = LDFLAGS = LOADLIBES = LDLIBS = -lstdc++ EXTENSION:=.cpp SRC:=$(wildcard $(SRC_DIR)/**/*$(EXTENSION)) $(wildcard $(SRC_DIR)/*$(EXTENSION)) SRC_WITHOUT_PREFIX:=$(patsubst $(SRC_DIR)%,%,$(SRC)) OBJ:=$(addprefix $(OBJ_DIR),$(SRC_WITHOUT_PREFIX:$(EXTENSION)=.o)) $(BIN_DIR)/$(TARGET) : $(OBJ) @if [ ! -d $(BIN_DIR) ]; then mkdir $(BIN_DIR); fi $(CC) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@ $(OBJ_DIR)/%.o : $(SRC_DIR)/%$(EXTENSION) @if [ ! -d $(OBJ_DIR) ]; then mkdir $(OBJ_DIR); fi $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< .PHONY: all clean all: $(BIN_DIR)/$(TARGET) clean: @if [ -d $(OBJ_DIR) ]; then rm -fr $(OBJ_DIR); fi @if [ -d $(BIN_DIR) ]; then rm -fr $(BIN_DIR); fi

少し複雑で長い内容ですが、このMakefileは汎用性があるので後半部分は編集することなく様々なプロジェクトでそのまま使うことができます。

このMakefileを他のプロジェクトで使うときには以下の部分を変更します。

  • 先頭のTARGET=に生成する実行ファイル名を指定します。(拡張子.exeは自動的に付加されるので省略できます。)

  • CXXFLAGSLDFLAGSLDLIBSなどコンパイラおよびリンカのオプションを必要に応じて変更します。

このMakefileはソースコード・フォルダーにある*.cppを自動的にビルド対象にするようになっているので、自分で1つずつファイルのビルド指示をMakefileに書いていく必要がありません。

これでMakefileの準備は完了です。

プロジェクトをビルドする

EclipseのメニューバーからProjectBuild Projectを選択するとプロジェクトをビルドすることができます。

ビルドの経過はConsoleビューに表示されます。エラーが表示されることなく Build Finished と表示されれば成功です。

無事にビルドが完了するとプロジェクトにはbinフォルダーとobjフォルダーが表示されます。

objフォルダーはビルド過程で生成される中間ファイルが入っているだけなので無視して構いません。binフォルダーには作成された実行ファイルsample1.exeが入っています。実行ファイルは自動的に認識されてBinariesにも表示されます。Binariesに表示されている実行ファイルは、EclipseのRun As操作で実行することができます。

プログラムを実行する

Project Explorerからプロジェクト名sample1を選択して、右クリック、Run AsLocal C/C++ Applicationを選択するとビルドしたプログラムを実行することができます。

他にもEclipseの画面上部のメニューボタンから実行することもできます。この実行ボタンにはショートカットキーが割り当てられており、Ctrl + F11を押すことでプログラムを実行することができます。

注意
 Ctrlを押さずにF11を押した場合はデバッガを使っての実行になります。デバッガの構成ができていないので、まだF11でプログラムをデバッグすることはできません。デバッグ実行については機会を改めて説明したいと思います。

プログラムを実行すると、出力がConsoleビューに表示されます。

ちゃんと動きましたね!

これで、Eclipse CDTを使ったC++プロジェクトの作成とビルド・実行ができました。次回は、GTK+を使ったウィンドウ・アプリケーションの作成について説明していきたいと思います。