ArduinoはどうしてPDEファイルをコンパイルできるのか
普通、C++のプログラムは#include文を頭にいっぱい書きます。
Arduinoのプログラム(スケッチ)の実体はC++ですが、#include文を書きません。
何もinlcudeしなくても各種関数が使えてしまいまうs。
では、どうやってPDEファイルをコンパイルしているのでしょう。
気になったので調べてみました。
適当なExampleをロードして、ビルドしてみました。
Arduinoの統合環境でShiftキーを押しながらビルドすると、コンパイル中のメッセージが見えます。
Arduino統合開発環境は、ソースコードの入っているフォルダには何も中間ファイルを残しません。
C:\Document and Settings・・・の中のTempにbuild数字.tmpというフォルダを作って、そこに中間ファイルを押し込めているようです。そして、その中に怪しげなCPPファイルが!

開いてみると、元のファイルに3行付け加わったファイルがCPPファイルという名前で出来ていました。

付け加わった3行は、
#include "WProgram.h"
void setup();
void loop();
です。
そして、avr-g++でこのCPPファイルをコンパイルしているようです。
※この3行はコメントが終わって最初の意味のある行が始まる直前に挿入されるようです。
つまり、PDEファイル結合→include文を含めた3行挿入→CPP作成→CPPをコンパイル、という手順のようです。
このあたりを行っているのがSketch.javaというプログラムです。
StringBuffer bigCode = new StringBuffer();
というのがあるので、おそらく関連するすべてのPDEファイルを1つにくっつけているのではないかと思われます。
3行挿入を行っているのがPdePreprocessor.javaというファイルのPdePreprocessorクラスです。
コンパイル時にエラーが生じたときに表示される行番号は、どうやら、この挿入した行を補正して表示するしくみがあるようです。
よくできていますね
| 固定リンク



コメント