カスタマーサポートセンター

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 の touch コマンドを使用することができますが、ファイルパスを追加、例えば "touch d:/test.c" と書いても、cygwin に受け入れられません。

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