0

組み込みシステム プロジェクト用の SConstruct ファイルを設計しようとしています。私のマシンのコンパイラは "C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\bin" にあります。Embedded Workbench の別のバージョンがインストールされている場合でも、ビルド システムにツールチェーンを見つけさせたいと思います。ユーザーが別の場所にインストールすることを選択しました。

makefile や ant ファイルで使用される戦略にも興味があります。おそらくここでも役立つからです。

これを行うためのいくつかの戦略は何ですか? Windows レジストリを検索するか、「C:\Program Files\IAR Systems\Embedded Workbench *\arm\bin」を検索する以外にオプションはありますか?

4

3 に答える 3

2

最も簡単な解決策は、環境変数を使用することです。ビルド ホストごとに手動で設定する必要がありますが、ビルド システムは環境変数を参照するだけでよいため、すべてのビルド ホストで共通にすることができます。

たとえば、あなたの場合は次のようになります。

EWBARM_V0504="C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\bin"

インストールされている他のバージョンについても同様で、ビルド システムではパスの代わりに %EWBARM_V0504% を使用します。さらに悪いことに、変数が存在しない場合、ビルドが失敗します。これは、間違ったコンパイラを使用するよりも望ましい方法であり、簡単に修正できます。

于 2010-02-01T23:25:37.780 に答える
0

SCons の良いところは、すべての Python を自由に使えることです。そのため、win32.winreg を使用してレジストリを調べたり、一連のパスをグロブしたりすることができます。もちろん、コマンドライン オプションまたはオプション ファイルを使用して、自動検出を無効にすることもできます。次に、選択したツールを見つけたら、SCons にそれを使用させる基本的に 2 つの方法があります。ツールのディレクトリを env['ENV']['PATH'] の前に追加します (そのために env.PrependEnvPath を使用できます)。または、ツールのフル パスを $CC の値として使用します (また、$LINK、$SHLINK なども適切に設定します)。

私は通常、env を受け取り、コンパイラとそのツールチェーン (cpp、リンカーなど) で使用するためにすべてをセットアップする TOOL_MYCOMPILER 関数を作成します。SConstruct/SConscript をよりクリーンに保ちます。

于 2010-02-04T00:36:48.397 に答える
0

ツールチェーンのバージョンが異なれば、バグや機能も異なる可能性があるため、黙って別のツール セットに戻すことは、おそらく悪い考えです。1 つのプロジェクトで複数のツール バージョンをサポートした場合は、通常、makefile または環境によってバージョン番号が割り当てられます。次に-D TOOLS_VERSION=$(TOOLS_VERSION)、コンパイラに渡し、その値を使用して、特定のバージョンのツールに必要な主要なバグ修正と回避策を指定できます。このシステムにより、サポートしたいツールが明確になり、他の開発者は 1 回の編集でツールのバージョンを簡単に切り替えることができます。

于 2010-02-01T23:25:00.543 に答える