Règles en mode batch
Mise à jour : novembre 2007
{frompath}.fromext{topath}.toext::
commands
Les règles d'inférence en mode batch prévoient un seul appel de la règle d'inférence quand N commandes sont concernées par cette règle d'inférence. Sans ces règles d'inférence en mode batch, il faudrait appeler N commandes. N est le nombre de dépendants qui déclenchent la règle d'inférence.
Les makefiles contenant des règles d'inférence en mode batch doivent utiliser NMAKE version 1.62 ou ultérieure. Pour déterminer la version de NMAKE, exécutez la macro _NMAKE_VER fournie avec NMAKE version 1.62 ou ultérieure. Cette macro retourne une chaîne représentant la version du produit C++.
La seule différence sur le plan de la syntaxe par rapport à la règle d'inférence standard est que la règle d'inférence en mode batch se termine par un double signe deux-points (::).
Remarque : |
---|
L'outil appelé doit pouvoir gérer des fichiers multiples. La règle d'inférence en mode batch doit utiliser $< comme macro pour accéder aux fichiers dépendants. |
Les règles d'inférence en mode batch peuvent accélérer le processus de génération. Il est plus rapide de fournir des fichiers au compilateur en batch, car le pilote du compilateur n'est appelé qu'une seule fois. Par exemple, le compilateur C et C++ est plus performant quand il gère un ensemble de fichiers car il réside alors en mémoire pendant tout le processus.
L'exemple suivant montre comment utiliser les règles d'inférence en mode batch :
# 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 produit la sortie suivante sans règles d'inférence en mode batch :
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 génère le résultat suivant avec les règles d'inférence en mode batch :
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...