バッチモード規則
{frompath}.fromext{topath}.toext::
commands
バッチモード推論規則では、N 個のコマンドで推論規則が利用されるときに、その推論規則が一度だけ呼び出されます。バッチモード推論規則を使用しない場合は、N 個のコマンドを呼び出す必要があります。N は、推論規則を呼び出す依存ファイルの数です。
バッチモード推論規則が格納されているメイクファイルでは、NMAKE 1.62 以降のバージョンを使用する必要があります。NMAKE のバージョンを確認するには、NMAKE 1.62 以降のバージョンで利用できる _NMAKE_VER マクロを実行します。このマクロでは、Visual C++ 製品のバージョンを表す文字列が返されます。
標準の推論規則との構文的な違いは、バッチモード推論規則が二重のコロン (::) で終わることだけです。
[!メモ]
呼び出すツールで複数のファイルを処理できることが必要です。バッチモード推論規則では、依存ファイルにアクセスするためのマクロとして $< を使用します。
バッチモード推論規則を使用すると、ビルド処理を高速化できます。ファイルを一括してコンパイラに渡すと、コンパイラのドライバーが一度しか呼び出されないため、処理速度が向上します。たとえば、C および C++ のコンパイラで複数のファイルをまとめて処理すると、処理の間コンパイラがメモリに常駐できるため、パフォーマンスが向上します。
バッチモード推論規則の使用方法を示す例は次のとおりです。
# sample makefile to illustrate batch-mode inference rules
O = .
S = .
Objs = $O/foo1.obj $O/foo2.obj $O/foo2.obj $O/foo3.obj $O/foo4.obj
CFLAGS = -nologo
all : $(Objs)
!ifdef NOBatch
{$S}.cpp{$O}.obj:
!else
{$S}.cpp{$O}.obj::
!endif
$(CC) $(CFLAGS) -Fd$O\ -c $<
$(Objs) :
#end of makefile
バッチモード推論規則を使用しない場合、NMAKE の出力は次のようになります。
E:\tmp> nmake -f test.mak -a NOBatch=1
Microsoft (R) Program Maintenance Utility Version 7.00.0000
Copyright (C) Microsoft Corp 1988-2001. All rights reserved.
cl -nologo -Fd.\ -c .\foo1.cpp
foo1.cpp
cl -nologo -Fd.\ -c .\foo2.cpp
foo2.cpp
cl -nologo -Fd.\ -c .\foo3.cpp
foo3.cpp
cl -nologo -Fd.\ -c .\foo4.cpp
foo4.cpp
バッチモード推論規則を使用した場合、NMAKE の結果は次のようになります。
E:\tmp> nmake -f test.mak -a
Microsoft (R) Program Maintenance Utility Version 7.00.0000
Copyright (C) Microsoft Corp 1988-2001. All rights reserved.
cl -nologo -Fd.\ -c .\foo1.cpp .\foo2.cpp .\foo3.cpp .\foo4.cpp
foo1.cpp
foo2.cpp
foo3.cpp
foo4.cpp
Generating Code...