C/C++ ツールコレクション記述子の使用 - NetBeans IDE 6.8 チュートリアル
執筆:
Alexander Simon
、管理: Susan Morgan
2009 年 12 月 [リビジョン番号: V6.8--1]
目次
このチュートリアルに従うには、次のソフトウェアが必要です。
必要なソフトウェアのダウンロードとインストールについては、「NetBeans IDE 6.8 のインストール 」および「C/C++/Fortran 向けの NetBeans IDE の構成 」を参照してください。 必要なソフトウェアのダウンロードとインストールに役立ててください。
はじめに
NetBeans IDE で C/C++ ファイルをコンパイルするときに、デフォルトで使用されるコンパイラフラグを変更したいと思ったことはありませんか。NetBeans IDE でサポートされていないコンパイラを追加したいと思ったことはありませんか。この記事は、そのようなことを行うときに役立ちます。このチュートリアルでは、NetBeans IDE 6.8 で既存のツールコレクションを編集する方法と、カスタムツールコレクションを作成する方法を示します。
ツールコレクション
ツールコレクションは、コンパイラ、make ユーティリティー、およびデバッガのセットです。コードのコンパイル、make、またはデバッグを行うたびに、NetBeans IDE はツールコレクション記述子に記述された実行可能ファイルを実行します。コード支援機能では、ツールコレクションから取得したインクルードパスとマクロが使用されます。
ツールコレクション記述子は、フォルダ org/netbeans/modules/cnd/resources/toolchain/ 内のモジュール ${NB}/cnd2/modules/org-netbeans-modules-cnd.jar にある xml ファイルです。これらの元の NetBeans ツール記述子 xml ファイルは編集しないでください。この記事では、編集可能な複製ファイルを作成する方法について説明します。
ツールコレクション記述子の編集
NetBeans IDE には記述子を編集する GUI がないため、ツールコレクション記述子を編集するには多少のコツが必要です。ここでは、ツールコレクション記述子の複製となる「シャドウ」コピーを作成する方法を説明します。このコピーを編集して、IDE のツールの使用方法を変更します。
IDE が実行中の場合は終了します。
次のフラグを、${NB}/etc/netbeans.conf ファイル内の netbeans_default_options エントリに追加します。
-J-Dcnd.toolchain.personality.create_shadow=true
IDE を起動して「ツール」>「オプション」を選択し、「オプション」ウィンドウの上の区画で「C/C++」を選択します。ツールコレクション記述子の「シャドウ」バージョンがユーザーディレクトリに作成されます。
${userdir}/config/CND/ToolChain
作成された記述子のリストは、次のようになるはずです。
Cygwin.xml GNU_solaris.xml SunStudio.xml SunStudio_12.1.xml SunStudio_Linux.xml
Cygwin_4.x.xml Interix.xml SunStudioExpress.xml SunStudio_12.xml
GNU.xml MinGW.xml SunStudio_10.xml SunStudio_8.xml
GNU_mac.xml MinGW_TDM.xml SunStudio_11.xml SunStudio_9.xml
使用しているツールチェーンの記述子を編集できます。その場合、編集した記述子は IDE を再起動したあと使用されます。これらの記述子 XML ファイルで使用されるタグの詳細については、「ツールコレクション XML ファイルの詳細 」を参照してください。
次回 IDE を起動する前に、-J-Dcnd.toolchain.personality.create_shadow=true フラグを削除します。IDE では、シャドウ記述子を一度だけ作成する必要があります。
カスタムツールコレクションの作成
独自のツールコレクションを作成できます。次の例では、新しいツールコレクションを含む新規 NetBeans モジュールを作成します。NetBeans モジュール作成の概要については、「NetBeans プラグインのクイックスタート 」を参照してください。
「ツール」>「プラグイン」を選択して「インストール済み」タブをクリックし、NetBeans インストールに NetBeans プラグイン開発モジュールが含まれていることを確認します。NetBeans プラグイン開発モジュールがインストールされていない場合は、「使用可能なプラグイン」タブをクリックして、モジュールをインストールします。検索ボックスに「プラグイン」と入力すると、すばやく探すことができます。
「ファイル」>「新規プロジェクト」を選択して、新規 NetBeans モジュールを作成します。「新規プロジェクト」ウィザードの「プロジェクトを選択」ページで、ウィザードの最初の手順として、カテゴリに「NetBeans モジュール」、プロジェクトに「モジュール」を選択します。「次へ」をクリックします。
「名前と場所」ページで、プロジェクト名を入力し (「mytoolchain 」など)、そのほかのフィールドはそのままにします。「次へ」をクリックします。
「基本モジュール構成」ページで、コード名ベースを入力し (「org.myhome.mytoolchain 」など)、「XML レイヤーを生成」チェックボックスを選択します。「完了」をクリックします。新しいプロジェクトが作成されます。
「プロジェクト」ウィンドウの「ソースパッケージ」ノードで、layer.xml ファイルを探します。layer.xml ファイルをダブルクリックして、ソースエディタで開きます。
filesystem タグ内に、次のテキストをコピー&ペーストします。
<folder name="CND">
<folder name="ToolChain">
<file name="GNU_tuned.xml" url="toolchain/GNU_tuned.xml">
<attr name="position" intvalue="5000"/>
<attr name="extends" stringvalue="GNU"/>
</file>
</folder>
</folder>
このテキストは、IDE が GNU_tuned.xml から新しいツールコレクションの記述を読み取ることを示します。
属性 extends は、使用中のツールコレクションが NetBeans GNU ツールコレクション記述子を拡張することを示します。
「ソースパッケージ」の下の mytoolchain パッケージを右クリックし、「新規」>「Java パッケージ」を選択してサブパッケージ toolchain を作成します。
toolchain サブパッケージを右クリックして「新規」>「その他」を選択し、表示されたダイアログで「その他」カテゴリを選択して、toolchain パッケージ内に新しいファイルを作成します。ファイルに GNU_tuned.xml という名前を付けて、「次へ」をクリックします。
GNU_tuned.xml 内に、次のテキストをコピー&ペーストします。
<?xml version="1.0" encoding="UTF-8"?>
<toolchaindefinition xmlns="http://www.netbeans.org/ns/cnd-toolchain-definition/1">
<toolchain name="GNU_tuned" display="GNU my tuned collection" family="GNU"/>
<platforms stringvalue="sun_intel,linux"/>
<cpp>
<compiler name="g++"/>
<development_mode>
<fast_build flags=""/>
<debug flags="-g3 -gdwarf-2" default="true"/>
<performance_debug flags="-g -O"/>
<test_coverage flags="-g"/>
<diagnosable_release flags="-g -O2"/>
<release flags="-O2"/>
<performance_release flags="-O3"/>
</development_mode>
</cpp>
</toolchaindefinition>
デバッグフラグは、デフォルトの GNU ツールコレクション記述子に設定されているフラグと異なり、-g3 および -gdwarf-2 に設定されています。
プロジェクトツリーは、次のようになります。
「プロジェクト」ウィンドウで、「mytoolchain 」プロジェクトノードを右クリックし、「実行」を選択します。モジュールが構築され、IDE の新しいインスタンス (モジュールのデフォルトターゲットプラットフォーム) にインストールされます。ターゲットプラットフォームが開き、新規モジュールを試すことができます。
実行中のモジュールで、「ツール」>「オプション」を選択し、「オプション」ウィンドウの上区画で「C/C++」を選択して、「構築ツール」タブを選択します。
新規ツールコレクション (GNU_tuned) が表示されない場合は、「デフォルトに戻す」をクリックします。環境を再スキャンするように求められた場合、「はい」をクリックして続行します。新規ツールコレクションが表示されます。
「ファイル」>「新規プロジェクト」>「サンプル」>「C/C++」>「Welcome」を選択して、新規 C/C++ サンプルプロジェクト Welcome を作成します。
プロジェクトノードを右クリックし、「プロパティー」を選択します。「プロジェクトプロパティー」ダイアログで「構築」ノードを選択し、「ツールコレクション」を GNU_tuned ツールコレクションに設定して、「了解」をクリックします。
プロジェクトを構築します。コンパイラに -g3 -gdwarf-2 というフラグがあります。
g++ -c -g3 -gdwarf-2 -MMD -MP -MF build/Debug/GNU_tuned-Solaris-x86/welcome.o.d -o build/Debug/GNU_tuned-Solaris-x86/welcome.o welcome.cc
「プロジェクトプロパティー」ダイアログで GNU_tuned ツールコレクションを選択して、「了解」をクリックします。
プロジェクトを再構築し、「出力」ウィンドウでコンパイル行を比較します。
g++ -c -g -MMD -MP -MF build/Debug/GNU-Solaris-x86/welcome.o.d -o build/Debug/GNU-Solaris-x86/welcome.o welcome.cc
これで、GNU_tuned ツールコレクションで、コンパイラフラグをデバッグ用 (GNU コンパイラの開発モード) に変更できました。
通常の IDE で GNU_tuned ツールコレクション用の新規モジュールを使用する場合は、バイナリ (..nbm ファイル) を作成してプラグインとして追加できます。
mytoolchain モジュールプロジェクトを右クリックして「NBM を作成」を選択します。「ファイル」タブで、プロジェクトの build サブディレクトリを確認すると、.nbm ファイルが作成されています。
「ツール」>「プラグイン」を選択し、「プラグイン」ダイアログで「ダウンロード済み」タブをクリックします。
「プラグインの追加」をクリックして、build ディレクトリに移動し、モジュール .nbm ファイルを選択して「開く」をクリックします。プラグインモジュールが「ダウンロード済み」タブの一覧に追加されます。
「ダウンロード済み」タブでチェックボックスをクリックしてモジュールを選択し、「インストール」ボタンをクリックします。NetBeans プラグインインストーラが開きます。
「次へ」をクリックして、インストールが完了するまで、インストーラ画面を先に進めます。
IDE を再起動して「ツール」>「オプション」を選択し、「オプション」ウィンドウの上区画で「C/C++」を選択して、「構築ツール」タブを選択します。
新規ツールコレクション (GNU_tuned) が表示されない場合は、「デフォルトに戻す」をクリックします。環境を再スキャンするように求められた場合、「はい」をクリックして続行します。
ツールコレクション XML ファイルの詳細
ここでは、ツールコレクション XML ファイルでもっとも重要なタグについて説明します。
ツールチェーン XML ファイルでサポートされるすべてのタグと属性のスキーマについては、NetBeans IDE 6.8 のソースツリー内にあるファイル を参照してください。
ツールコレクション定義タグ
toolchain
ツールコレクションの名前
名前 (name)
ツールコレクションの名前
display
ツールコレクションの表示名
family
ツールコレクションのグループ名
platforms
サポート対象のプラットフォーム
stringvalue
サポート対象プラットフォームのコンマ区切りのリスト。 可能な値は次のとおりです。
linux
unix
sun_intel
sun_sparc
windows
mac
none
makefile_writer
カスタムメイクファイルライター。
class
カスタムメイクファイルライターのクラス名。
org.netbeans.modules.cnd.makeproject.spi.configurations.MakefileWriter を実装しているはずです。
drive_letter_prefix
ファイル名の特別な接頭辞
stringvalue
UNIX の場合は、「/」 Windows の cygwin の場合は、「/cygdrive/」
base_folders
base_folders タグのコンテナ。
1 つの base_folders タグには 1 つ以上の base_folder タグが含まれています。
base_folder
コンパイラのベースディレクトリの説明。
このタグには、次のタグを含めることができます。
regestry
ツールの Windows レジストリキー。これはミススペルですが、XML タグには「regestry」と記述する必要があります。
pattern
NetBeans IDE がレジストリ内のコンパイラを検索できるようにする正規表現
suffix
実行可能ファイルを含むフォルダ
path_patern
NetBeans IDE がパスをスキャンしてコンパイラを検索できるようにする正規表現。これはミススペルですが、XML タグには「path_patern」と記述する必要があります。
command_folders
command_folders タグのコンテナ。
1 つの command_folders タグには 1 つ以上の commander_folder タグが含まれています。
command_folder
UNIX 系のコマンドが格納されているディレクトリを記述。
Windows 上の MinGW コンパイラにのみ必要。command_folder タグには、次のタグを含めることができます。
regestry
コマンドの Windows レジストリキー。これはミススペルですが、XML タグには「regestry」と記述する必要があります。
pattern
NetBeans IDE がレジストリ内のコマンドフォルダを検索できるようにする正規表現
suffix
実行可能ファイルを含むフォルダ
path_patern
NetBeans IDE がコマンドを検索できるようにする正規表現。これはミススペルですが、XML タグには「path_patern」と記述する必要があります。
scanner
エラーパーサーサービスの名前。「カスタムコンパイラのエラーハンドラの作成 」を参照してください。
id
エラーパーサーサービスの名前
コンパイラフラグ
この表では、コンパイラの記述とツールチェーンのコンパイラフラグの指定に使用されるタグの一覧を示します。
c,cpp
次のサブノードに配置されているコンパイラフラグのセット
recognizer
コンパイラを検索できるようにする正規表現
Windows の cygwin 下の GNU 用 .*[\\/].*cygwin.*[\\/]bin[\\/]?$
compiler
コンパイラ名 (実行可能ファイルの名前)
gcc または g++
version
バージョンフラグ
--version
system_include_paths
システムインクルードパスを取得するフラグ
-x c -E -v
system_macros
システムマクロを取得するフラグ
-x c -E -dM
user_include
ユーザーインクルードパスを追加するフラグ
-I
user_macro
ユーザーマクロを追加するフラグ
-D
development_mode
各種開発モードのフラグのグループ
warning_level
各種警告レベルのフラグのグループ
architecture
各種アーキテクチャーのフラグのグループ
strip
デバッグ情報を取り除くフラグ
-s
dependency_generation
依存生成のフラグ
-MMD -MP -MF $@.d
precompiled_header
再コンパイルされたヘッダーのフラグ
-o $@
multithreading
マルチスレッドのサポートのフラグのグループ
standard
各種言語標準のフラグのグループ
language_extension
各種言語拡張のフラグのグループ
カスタムコンパイラプロバイダの作成
NetBeans IDE には、次のデフォルトのコンパイラプロバイダがあります。
org.netbeans.modules.cnd.makeproject.api.compilers.MakeProjectCompilerProvider
このプロバイダは、ほとんどの toolchain で適切に動作しますが、独自のプロバイダを作成することもできます。
独自のコンパイラプロバイダを作成する
カスタムコンパイラのエラーハンドラの作成
NetBeans IDE には、デフォルトのコンパイラエラーハンドラが 2 つあります。
GNU コンパイラ用
Sun Studio コンパイラ用
GNU コンパイラハンドラは、どのような GNU コンパイラに対しても適切に動作しますが、必要に応じて独自のコンパイラエラーハンドラを定義することもできます。
独自のコンパイラエラーハンドラを作成する
抽象クラス org.netbeans.modules.cnd.execution.ErrorParserProvider を拡張します。
次のように、クラスをサービスとして定義します。
@org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.execution.ErrorParserProvider.class)
public class CustomCompilerProvider extends ErrorParserProvider {
...
@Override
public String getID() {
return "MyParser"; // NOI18N
}
}
次のように、エラースキャナとツールコレクションの記述を、ID でリンクします。
</scanner id="MyParser">
...
</scanner>