Arduinoプロジェクトでは、ブレッドボードにArduino Mega2560とスタンドアロンのATmega 328P DIPチップの2つのデバイス用にコンパイルしてダウンロードするビルド構成があります。両方の設定は、少なくともHelloプログラムのようなデバイスに依存しないコードの場合、それぞれのデバイスでコンパイル、ダウンロード、実行されます。しかし、ほとんどのプログラムは、いくつかの条件付きのデバイス依存コードを必要とします。コンパイルのコマンドラインに追加される(プロジェクトのプロパティ> C/C++ビルド> AVRコンパイラ(とAVR C++コンパイラ)>シンボル)のシンボルをいくつか作成して定義することができました。Eclipse:コンパイル時にbuild-config変数を利用するには?
しかし、IDEのどこかで、私が各構成に対して選択した部品やその他の選択肢は、(Project Properties> C/C++ Build> Environment)で環境変数に割り当てられており、コンパイラコマンド-lineオプションではなく-Dオプションとして指定します。私はこれらの既存のものを使うのが好きです。なぜなら、1)自動的に作成されるからです。 2)私はコンパイラの1つのためにそれらの1つを異なる方法で入力しません。 3)他の作家が同じコンベンションに従うことができます。私は、他のプロジェクトではよりポータブルなコードを作ることができます。
#definesとしてコンパイラに渡す方法はありますか?
(Eclipseのインディゴ、CrossPack-AVR-20100115、&のMac OS 10.6.8)
編集:
回避策、私が作成し、プリビルドスクリプトを書いたとして、ビルド時の環境変数を#defineしするヘッダファイル:
printenv | awk 'BEGIN{print "/*** AUTO-GENERATED FILE -- DO NOT EDIT. ***/\n";} {sub(/^/, "#define "); sub(/=/, " "); print; }' >${CWD}/../src/buildtime-environment.h
それは2つの注意点を十分に動作します。それは壊れやすいです
- - それは私のプロジェクトのディレクトリ構造の「特別な知識」を持っています。
- マクロエディタのマクロ展開ツールチップにマクロの古い値が表示され、これを忘れた場合にゴーストを追跡する可能性があり、先端。
(解決を見つけることを断念しない限り、/までコメントを残します)。
これは私がこれまでに作ってみたベストです。私はまだ他の提案にもオープンしています。 – JRobert