カスタム ビルド ツールの指定
カスタム ビルド ツールは、個々の入力ファイルをビルドするために必要な情報をビルド システムに提供します。カスタム ビルド ツールでは、実行するコマンド、入力ファイルの一覧、そのコマンドで生成される出力ファイルの一覧、およびオプションでツールの説明を指定します。
カスタム ビルド ツールおよびカスタム ビルド ステップの概要については、「カスタム ビルド ステップとビルド イベントについて」を参照してください。
カスタム ビルド ツールを指定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「Visual C++ プロジェクトのプロパティの設定」を参照してください。
[構成プロパティ] をクリックすると [構成] ボックスが有効になります。[構成] ボックスで、カスタム ビルド ツールを指定する構成を選択します。
ソリューション エクスプローラーで、カスタム ビルド ツールを適用する入力ファイルを選択します。
[カスタム ビルド ツール] フォルダーが表示されない場合は、選択したファイルの拡張子に既定のツールが関連付けられています。たとえば、.c ファイルと .cpp ファイルの既定のツールはコンパイラです。既定のツール設定をオーバーライドするには、[構成プロパティ] ノードの [全般] フォルダーの [項目の種類] プロパティで、[カスタム ビルド ツール] をクリックします。[適用] をクリックすると、[カスタム ビルド ツール] ノードが表示されます。
[カスタム ビルド ツール] ノードの [全般] フォルダーで、カスタム ビルド ツールに関連付けられているプロパティを指定します。
[追加の依存ファイル] で、カスタム ビルド ツールが定義されているファイル以外の追加ファイルを指定します。カスタム ビルド ツールが関連付けられているファイルは、暗黙的にツールへの入力と見なされます。入力ファイルの追加は、カスタム ビルド ツールの要件ではありません。追加する入力ファイルが複数ある場合は、セミコロンで区切ります。
[追加の依存ファイル] で指定したファイルの日付が入力ファイルよりも後の場合は、カスタム ビルド ツールが実行されます。[追加の依存ファイル] で指定したすべてのファイルが入力ファイルよりも古く、入力ファイルが [出力ファイル] プロパティで指定したファイルよりも古い場合は、カスタム ビルド ツールが実行されません。
たとえば、MyInput.x を入力として MyInput.cpp を生成するカスタム ビルド ツールがあり、その MyInput.x がヘッダー ファイル MyHeader.h をインクルードする場合があるとします。MyHeader.h を MyInput.x への入力依存ファイルとして指定でき、ビルド システムは MyInput.x または MyHeader.h に対して MyInput.cpp が古い場合に MyInput.cpp をビルドします。
入力依存関係により、カスタム ビルド ツールが必要な順序で実行されることも保証されます。前の例で、MyHeader.h が実際にはカスタム ビルド ツールの出力であるとします。MyHeader.h は MyInput.x に依存するため、ビルド システムは最初に Myheader.h をビルドしてから、MyInput.x に対するカスタム ビルド ツールを実行します。
[コマンド ライン] に、コマンド プロンプトに指定する場合と同じようにコマンドを指定します。有効なコマンドまたはバッチ ファイル、および必要な入力ファイルまたは出力ファイルを指定します。バッチ ファイルの名前の先頭に call バッチ コマンドを指定して、すべての後続コマンドが実行されるようにする必要があります。
MSBuild マクロを使用して、複数の入力ファイルおよび出力ファイルをシンボルで指定できます。ファイルの場所、またはファイル セットの名前を指定する方法詳細情報:「ビルドのコマンドとプロパティのマクロ」を参照してください。
'%' 文字は MSBuild によって予約されているため、環境変数を指定する場合は、各 % エスケープ文字を 16 進数の %25 エスケープ シーケンスに置き換えてください。たとえば、%WINDIR% は %25WINDIR%25 に置き換えます。MSBuild は、環境変数にアクセスする前に、各 %25 シーケンスを % 文字に置き換えます。
[説明] ボックスに、このカスタム ビルド ツールの説明メッセージを入力します。このメッセージは、ビルド システムがこのツールを処理するときに出力ウィンドウに出力されます。
[出力ファイル] に、出力ファイルの名前を指定します。これは必須のエントリです。このプロパティの値がないと、カスタム ビルド ツールは実行されません。カスタム ビルド ツールの出力が複数ある場合は、ファイル名をセミコロンで区切ります。
出力ファイルの名前は、[コマンド ライン] プロパティで指定した名前と同じである必要があります。プロジェクト ビルド システムでは、ファイルを検索して日付をチェックします。出力ファイルが入力ファイルよりも新しい場合、または出力ファイルが見つからない場合は、カスタム ビルド ツールが実行されます。[追加の依存ファイル] で指定したすべてのファイルが入力ファイルよりも古く、入力ファイルが [出力ファイル] プロパティで指定したファイルよりも古い場合は、カスタム ビルド ツールが実行されません。
カスタム ビルド ツールで生成された出力ファイルをビルド システムで操作する場合は、その出力ファイルをプロパティに手動で追加する必要があります。カスタム ビルド ツールにより、ビルド時にファイルが更新されます。
使用例
プロジェクトに parser.l という名前のファイルを含めるとします。構文アナライザーで parser.l を処理し、.c ファイルを同じ基本名 (parser.c) で生成します。
まず、parser.l と parser.c をプロジェクトに追加します。ファイルがまだ存在していない場合は、ファイルに参照を追加します。parser.l に対してカスタム ビルド ツールを作成し、Commands プロパティに次のように入力します。
lexer %(FullPath) .\%(Filename).c
このコマンドは、parser.l に対して構文アナライザーを実行し、parser.c をプロジェクトのディレクトリに出力します。
Outputs プロパティに、次のように入力します。
.\%(Filename).c
プロジェクトをビルドすると、ビルド システムは parser.l と parser.c のタイムスタンプを比較します。parser.l の方が新しい場合、または parser.c が存在しない場合は、ビルド システムが [コマンド ライン] プロパティの値を実行して parser.c を最新にします。parser.c はプロジェクトにも追加されているため、ビルド システムは parser.c をコンパイルします。