FAQ~よくある質問~ | FAQマスタ詳細表示
FAQ詳細情報
ID | 10810518 |
---|---|
FAQカテゴリ(大) | IDE / エディタ / GUI |
最終更新日 | 2016-03-06 |
質問内容
TN99436: ビルドアクション (プレビルドとポストビルド)
回答内容
ターゲット:すべて
コンポーネント:IDE
公開日:2013年6月11日午後03時55分
概要
このテクニカルノートでは、ビルドアクションについて解説と提案を行います。
注1 ビルドウィンドウでビルドアクションからの出力を確認するには、 ツールメニュー > オプション > メッセージ > ビルドメッセージの表示 のドロップダウンリストで「全て」を選択します。
注2 プロジェクトがアップデート済みの場合、ビルドアクションは起動されません。すなわち、ビルドアクションはツールチェーンのうちどれかのツールが起動されたときのみ実行されます。
プレビルド・コマンドラインとポストビルド・コマンドライン
環境変数 PATH に application.exe のパスが含まれていれば、プレビルド・コマンドラインとポストビルド・コマンドラインより、実行させることができます。
環境変数 PATH は、Windows のコマンドプロンプトのMS-DOSコマンド「path」で確認できますが、プレビルド・コマンドラインとポストビルド・コマンドラインから直接起動することはできません。以下のように間接的に実行する必要があります。
cmd.exe /c "command line"
プレビルド・コマンドラインで、MS-DOSの path コマンドを起動するには、以下のようにします。
cmd /c "path"
"$TOOLKIT_DIR$\bin" はデフォルトで PATH変数に追加してあるので、Embedded Workbench のアプリケーションはプレビルド・コマンドラインとポストビルド・コマンドラインから直接起動することができます。
ポストビルドコマンドライン (IAR Embedded Workbench for ARM の例):
ielfdumparm
stdout と stderr のリダイレクト
Windows のコマンドプロンプトの stdout と stdin をリダイレクトするには、コマンドを次のように入力します。
path > output.txt 2>&1
このMS-DOSのコマンドと同じコマンドをプレビルド・コマンドラインで起動するには、以下のように、間接的に起動します。
cmd /c "path > output.txt 2>&1"
注 カレントディレクトリは IarIdePm.exe が置かれている場所ですので、出力ファイルの場所、例えば、プロジェクトのディレクトリを指定する必要があります。
cmd /c "path > $PROJ_DIR$\output.txt 2>&1"
Windowsのコマンドプロンプトで application.exe の出力をリダイレクトするには、以下のようにします。
application.exe > output.txt 2>&1
考えられるプレビルド・コマンドラインまたはポストビルド・コマンドラインは、以下のようになりますが、output.txt ファイルはたぶん空になってしまうでしょう。
cmd /c "application.exe > output.txt 2>&1"
この場合、以下のように、二重に間接呼出しします。
cmd /c "cmd /c " "application.exe > output.txt 2>&1"
ポストビルド・コマンドライン (IAR Embedded Workbench for ARMの例):
cmd /c "cmd /c "ielfdumparm > $PROJ_DIR$\output.txt 2>&1""
但し、このコマンドラインは煩雑なので、 .bat ファイル (次項で説明) をポストビルド・コマンドラインから呼び出すほうが良いでしょう。
.batファイルの使用
.batファイルを使用すると、プレビルド・コマンドラインとポストビルド・コマンドラインに必要な、"cmd /c" を省略し、MS-DOSコマンドラインを起動することができます。
注 cmd /c を2つ使用している場合、省略できるのは最初の cmd /c のみです。
• プロジェクトのあるフォルダにある .bat ファイルを使用して、MS-DOSの path コマンドを起動する時は、
プレビルド・コマンドライン:
$PROJ_DIR$\pre-build.bat
pre-build.bat ファイル:
path
• プロジェクトのあるフォルダにある .bat ファイルを使用して、MS-DOSの path コマンドの出力をリダイレクトするには、
プレビルド・コマンドライン:
$PROJ_DIR$\pre-build.bat "$PROJ_DIR$"
pre-build.bat ファイル:
path > %1\output.txt 2>&1
注: .bat ファイルの中では $PROJ_DIR$ のような引数変数は、MS-DOSが認識できないため、使用できません。代わりに .bat ファイルのパラメータで渡してください。
• プロジェクトのあるフォルダにある .bat ファイルを使用して ielfdumparmを起動します。
ポストビルド・コマンドライン:
$PROJ_DIR$\post-build.bat
post-build.bat ファイル (IAR Embedded Workbench for ARM の例):
ielfdumparm
注: コマンドは起動されますが、コマンドからの出力は、おそらく IAR Embedded Workbench のビルドウィンドウに表示されません。この場合、出力をファイルにリダイレクトし、typeコマンドでこのファイルをダンプします。 (下に示します)
• プロジェクトのあるフォルダにある .bat ファイルを使用して ielfdumparmを起動します。
ポストビルド・コマンドライン:
$PROJ_DIR$\post-build.bat "$PROJ_DIR$"
post-build.bat ファイル (ARMの例):
cmd /c "ielfdumparm > "%1\output.txt 2>&1""
出力ファイルの内容をダンプするには、.batのファイルに次の行を追加します。
type "%1\output.txt"
注: .bat ファイル内のいくつかのコマンドを実行し、出力を同じ出力ファイルにリダイレクトしたい場合は、下の「COMMAND.COM」へのリンクを見て、リダイレクト、パイプ、チェーンについて学習してください。
ARM用のサンプル
Technical Note 28924のサンプルプロジェクトを見て、プロジェクト Common をチェックすると、post-build.bat ファイルが、ポストビルド・アクションに使用されていることが分かります。
戻り値
もし、ポストまたはプレビルドコマンドがエラーコード (!= 0) を返した時は、ビルド/メークコマンド全体が中断されます。下のリンクにある、サンプルプロジェクトとスクリーンショットを見てください。
・ Return value example project (IAR Embedded Workbench for ARM 6.50.6).zip
ビルドアクションからの出力のみを見る
ビルドウィンドウの情報量が多すぎて、ビルドアクションの情報を読み取りづらいと感じる時は、ビルドアクションの出力をテキストファイルにリダイレクトし、ノートパッドを起動して見ると良いでしょう。
ポストビルド・コマンドライン:
$PROJ_DIR$\post-build.bat $PROJ_DIR$"
post-build.bat ファイル (ARMの例):
echo off
cmd /c "ielfdumparm > "%1\output.txt 2>&1""
echo Look in the notepad window and then close
notepad "%1\output.txt"
echo on
注 パス名に空白文字 (スペース) が含まれている時は、全体をダブルクォーテーション ( " ) で囲ってください。もし、例えば、ノートパッドを起動する場合で、それがうまくいかない場合パス名をスペースまたはクォートを含まないものに変えてみてください。
Cygwin の touch コマンド
環境変数 PATH に "cygwin-application.exe" のパス名が含まれている時は、プレビルド・コマンドラインとポストビルド・コマンドラインに "cygwin-application.exe" を使用することができます。
Cygwin は POSIXパスの /cygdrive/d/test.c を前提としていますから、正しい、コマンドラインは "touch /cygdrive/d/test.c" となります。代わりに、以下のように間接的に実行する必要があります。
cmd /c "touch /cygdrive/d/test.c"
プロジェクトのフォルダにある .bat ファイルを用いて以下のようにします。
プレビルド・コマンドライン:
$PROJ_DIR$\pre-build.bat
pre-build.bat ファイル:
touch /cygdrive/d/test.c
注 1: $PROJ_DIR$ のような引数変数を、 .bat ファイルのパラメータに使用することはできません。 (cygwin POSIX パスを前提としているので).
注 2: touch コマンドをそのまま使用したい場合は、ビルドアクションは使用できないので、他の方法を考える必要があります。「他の方法」は、 touch を起動する、分割した .bat ファイルを、 IarBuild.exe の前に起動します。(Technical Note 47884 の IarBuild.exeの情報を参照してください)
注 3: 「他の」 、touch コマンドを起動する方法は、 プレビルドアクションで、オブジェクトファイルを削除することです。例えば、
プレビルド・コマンドライン
cmd /c "del "$OBJ_DIR$\test.o""
全ての製品の名前は、それぞれの所有者の商標または登録商標です。
参考資料URL
-
http://supp.iar.com/Support/?Note=99436
Tecn Note 99436: 英文サイト