プロジェクト

全般

プロフィール

Windows NetBeans C++開発環境(MinGW 64bit編)

はじめに

Windows上でCygwinやMinGWなどのオープンソースツール(GCC)のC++コンパイラを使った統合開発環境をNetBeansで構築することができます。
NetBeans IDEのC/C++版はデフォルトではGNU Makeでのビルドのみをサポートしています。
このページは、MinGW 64bit版を使った環境構築を対象とします。

ツールの設定

次のサイトに設定方法が紹介されています。

NetBeans - How To Create a 64bit C/C++ Windows Program with NetBeans

インストール

NetBeansのインストール

NetBeans IDEをダウンロードします。C++開発機能が含まれているC/C++版かすべて版のどちらかをダウンロードします。

download-1.png

MinGW 64とMSYSのインストール

MinGW 64とMSYSのインストールは次のページに記載しています。
Windows MinGW開発環境

コンパイルツールの設定

インストールが完了したらNetBeansを起動します。

[ツール]メニュー > [オプション] > [C/C++]ボタンを押し、[ビルド・ツール]タブを選択します。オプションダイアログが表示されます。

option-1.png

デフォルトではツールコレクション欄にはCygwinの設定が載っています。
(Cygwinをインストールしていたからかもしれません)

今回は、MinGW64を使用するのですが、MinGW64の設定はないので、ツールコレクションにMinGW64の設定を追加します。
[追加]ボタンを押し、「新規ツール・コレクションの追加」ダイアログが表示されるので、ベース・ディレクトリ欄にMinGW64をインストールしたディレクトリを指定します(次の画面)。

option-2.png

MinGW64だとベースディレクトリを指定するだけでは認識できないらしく警告がでています。
そこで、ツール・コレクション・ファミリに選択リストから「MinGW」を選択します。ツール・コレクション名は「MinGW64」と記載します(次の画面)。

option-3.png

MSYSに環境変数PATHが通っていれば、makeコマンドの欄にMSYSのmake.exeが設定されます。ただし、コンパイラ欄が空欄のままです。

option-4_1.png

注記
MSYSへの環境変数PATHが通っていないと、makeコマンドは次の画面のようにCygwinのmakeへのパスが設定されています。環境変数を見直してください。
NetBeansがMSYSのmakeコマンドを認識していないと、makeコマンドに手でパスを設定しても、Cygwinのシェルが使われて困ることがあります。

option-4.png

コンパイラコマンド(C, C++, Fortran, アセンブラ)を手動で指定します。

option-5.png

問題解決

Cygwinのmake.exeが使われてしまう

NetBeansがデフォルトで設定していたCygwinのmake.exeのままビルドを実行すると次のエラーが発生しました。

"/C/cygwin64/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
/bin/sh: /C/cygwin64/bin/make.exe: No such file or directory
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make: *** [.build-impl] Error 127

ビルド FAILED (終了値2, 合計時間: 152ms)

NetBeansが、/bin/sh を実行していますが、このシェルはCygwinのものと思われます。
Cygwin(Ver.1.7.28)では、シェル上で/C/cygwin64/bin/make.exeのような指定では実行できません。

MinGW64のコンパイラとcygwinのmake(というかCygwinのシェル上でビルドが実行されると)はうまくいかないようです。MSYSが使われるよう環境変数PATHを確認してください。

参考までに、むりやりcygwinのmake.exe(とcygwinのシェル)で実行しようとした経緯を以下に載せておきます。

makeのエラー回避試行(1):部分的にOK

/C/cygwin64/bin/make.exe でmakeが実行できるようにすれば解決できると考え、Cygwin上で/C を/cygdrive/cへのシンボリックリンクとします。

$ ln -s /cygdrive/c /C

シンボリックリンク作成後、ビルドを実行するとOKとなりました。

"/C/cygwin64/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
"/C/cygwin64/bin/make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW64-Windows/hellomingw64.exe
make[2]: Entering directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
make[2]: 'dist/Debug/MinGW64-Windows/hellomingw64.exe' is up to date.
make[2]: Leaving directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
make[1]: Leaving directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'

ビルド SUCCESSFUL (合計時間: 313ms)

この方法であれば、cygwinのcmakeを使うことも可能と思われます。

makeのエラー回避試行(2):NG

MinGW64のmakeを使うことにします。そこで、MinGW64のbinディレクトリをみると、make.exeが見当たらず、ただし、mingw32-make.exeが存在します。
[ツール]メニュー > [オプション] > [C/C++]ボタンを押し、[ビルド・ツール]タブを選択、makeコマンド欄にmingw32-make.exeへのパスを指定します。

option-6.png

すると、上の画面のようにエラーとなります。コマンド名はmake.exeでないと受け付けてくれません。

makeのエラー回避試行(3):NG

そこで、mingw32-make.exeへのシンボリックリンクファイルmake.exeを作ります。
管理者権限でコマンドプロンプトを起動し(スタートメニューからアクセサリ下のコマンドプロンプトを右クリックし[管理者として実行])、MinGW64のインストールディレクトリ下のbinへディレクトリを移動します。

C:\Windows\system32>cd "\Program Files\tools\mingw64\bin" 

C:\tools\mingw64\bin>mklink make.exe mingw32-make.exe
make.exe <<===>> mingw32-make.exe のシンボリック リンクが作成されました

C:\tools\mingw64\bin>dir make*

 C:\tools\mingw64\bin のディレクトリ

2014/03/01  10:05    <SYMLINK>      make.exe [mingw32-make.exe]

[ツール]メニュー > [オプション] > [C/C++]ボタンを押し、[ビルド・ツール]タブを選択、makeコマンド欄に作成したシンボリックリンクmake.exeへのパスを指定します。

option-7.png

ビルドを実行します。

"/C/Program Files/tools/mingw64/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
/usr/bin/sh: /C/Program Files/tools/mingw64/bin/make.exe: No such file or directory
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make: *** [.build-impl] Error 127

ビルド FAILED (終了値2, 合計時間: 154ms)

やはりエラーとなってしまいました。

makeのエラー回避試行(4):部分的にOK

NetBeansを起動する前に、環境変数PATHにmake.exeのあるディレクトリを追加し、NetBeansのmakeコマンド設定にはパスを省略し実行ファイル名make.exeだけを指定します。
[ツール]メニュー > [オプション] > [C/C++]ボタンを押し、[ビルド・ツール]タブを選択、makeコマンド欄にmake.exeだけ指定します。

option-8.png

ビルドを実行します。

"make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
"make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW64-Windows/hellomingw64.exe
make[2]: Entering directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
make[2]: 'dist/Debug/MinGW64-Windows/hellomingw64.exe' is up to date.
make[2]: Leaving directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
make[1]: Leaving directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'

ビルド SUCCESSFUL (合計時間: 306ms)

NetBeansを実行するときだけ環境変数PATHにMinGW64を追加したいときは、バッチファイルに環境変数PATH設定をしてNetBeansを起動するよう記述し、デスクトップ等に貼っておきます。

@echo off
:: 環境変数(グローバル)
:: MinGW 64 GCC
PATH=%PATH%;C:\Program Files\tools\mingw64\bin
C:\Program Files\NetBeans 8.0 RC1\bin\netbeans64.exe

プログラム作成

Helloプログラムの作成

  • [ファイル]メニュー > [新規プロジェクト] でカテゴリ欄C/C++を選択し、プロジェクト欄C/C++アプリケーションを選択、[次]ボタンを押します。
  • プロジェクト名欄に HelloMinGW64 を入力、ツール・コレクション欄でMinGW64を選択し[終了]ボタンを押します。

application-1.png

main.cppに標準出力にハローメッセージを出力する定番のコードを書くことにします。プロジェクト作成時に自動生成されたmain.cppのコードから、コメントとusing namespace文を削除し、標準出力にHelloメッセージを出すコードを記述しました。

application-2.png

記述したコードの行頭に警告マークが付いています。

application-3.png

警告なのでこのままでもビルド・実行は可能です。

実行

makeの回避試行(4)を適用しています。

ビルドの出力は次のようになっています。

"make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
"make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW64-Windows/hellomingw64.exe
make[2]: Entering directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
mkdir -p build/Debug/MinGW64-Windows
rm -f "build/Debug/MinGW64-Windows/main.o.d" 
g++    -c -g -MMD -MP -MF "build/Debug/MinGW64-Windows/main.o.d" -o build/Debug/MinGW64-Windows/main.o main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:16:50: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
     []() { cout << "Hello, C++11 World" << endl; }();
                                                  ^
mkdir -p dist/Debug/MinGW64-Windows
g++     -o dist/Debug/MinGW64-Windows/hellomingw64 build/Debug/MinGW64-Windows/main.o 
make[2]: Leaving directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'
make[1]: Leaving directory '/cygdrive/c/Users/torutk/Documents/NetBeansProjects/C++/HelloMinGW64'

ビルド SUCCESSFUL (合計時間: 751ms)

プログラムの出力は次のようになっています。

"make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/toru/Documents/NetBeansProjects/Experiments/C++/HelloMinGW64'
"make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW64-Windows/hellomingw64.exe
make[2]: Entering directory '/cygdrive/c/Users/toru/Documents/NetBeansProjects/Experiments/C++/HelloMinGW64'
mkdir -p build/Debug/MinGW64-Windows
rm -f "build/Debug/MinGW64-Windows/main.o.d" 
g++    -c -g -MMD -MP -MF "build/Debug/MinGW64-Windows/main.o.d" -o build/Debug/MinGW64-Windows/main.o main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:16:50: warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]
     []() { cout << "Hello, C++11 World" << endl; }();
                                                  ^
mkdir -p dist/Debug/MinGW64-Windows
g++     -o dist/Debug/MinGW64-Windows/hellomingw64 build/Debug/MinGW64-Windows/main.o 
make[2]: Leaving directory '/cygdrive/c/Users/toru/Documents/NetBeansProjects/Experiments/C++/HelloMinGW64'
make[1]: Leaving directory '/cygdrive/c/Users/toru/Documents/NetBeansProjects/Experiments/C++/HelloMinGW64'

ビルド SUCCESSFUL (合計時間: 751ms)


ほぼ10年前に更新