Preprocesamiento de archivos MAKE
Puede controlar la sesión de NMAKE mediante directivas y expresiones de preprocesamiento. Las instrucciones de preprocesamiento se pueden colocar en el archivo Make o en Tools.ini
. Con directivas, puede procesar condicionalmente el archivo Make, mostrar mensajes de error, incluir otros archivos Make, anular la definición de una macro y activar o desactivar determinadas opciones.
Directivas de preprocesamiento de archivos MAKE
Las directivas de preprocesamiento no distinguen mayúsculas de minúsculas. El signo de exclamación inicial (!
) debe aparecer al principio de la línea. Puede haber cero o más espacios o pestañas después del signo de exclamación para aplicar la sangría.
!CMDSWITCHES
{+
opción |-
opción } ...Activa o desactiva cada opción enumerada. Debe haber espacios o pestañas antes del operador
+
o-
. No puede aparecer ningún espacio entre el operador y las letras de las opciones. Las letras no distinguen mayúsculas de minúsculas y se especifican sin una barra diagonal (/
). Para activar algunas opciones y desactivar otras, use especificaciones separadas de!CMDSWITCHES
.Solo
/D
,/I
,/N
y/S
se pueden usar en un archivo Make. EnTools.ini
, se permiten todas las opciones excepto/F
,/HELP
,/NOLOGO
,/X
y/?
. Los cambios especificados en un bloque de descripción no surten efecto hasta el siguiente bloque de descripción. Esta directiva actualizaMAKEFLAGS
; los cambios se heredan durante la recursividad siMAKEFLAGS
se especifica.!ERROR
Mensaje de textoMuestra texto en el error U1050 y después detiene NMAKE, incluso si se usa
/K
,/I
,.IGNORE
,!CMDSWITCHES
o el comando de guion (-
). Si hay espacios o pestañas antes del texto, se ignoran.!MESSAGE
Mensaje de textoMuestra texto en la salida estándar. Si hay espacios o pestañas antes del texto, se ignoran.
!INCLUDE
[<
] nombre de archivo [>
]Lee el nombre de archivo como un archivo Make y después continúa con el archivo Make actual. NMAKE busca primero el nombre de archivo en el directorio especificado o actual. Después, de manera recursiva en los directorios de los archivos Make primarios. Posteriormente, si el nombre de archivo está entre corchetes angulares (
< >
), lo busca en directorios especificados por la macroINCLUDE
, que se establece inicialmente en la variable de entornoINCLUDE
. Resulta útil pasar valores.SUFFIXES
,.PRECIOUS
y reglas de inferencia a los archivos Make recursivos.!IF
constant_expressionProcesa instrucciones entre
!IF
y la siguiente!ELSE
o!ENDIF
si la expresión_constante se evalúa como un valor distinto de cero.!IFDEF
macro_nameProcesa instrucciones entre
!IFDEF
y la siguiente!ELSE
o!ENDIF
si se define el nombre_de_la_macro. Una macro en null se considera definida.!IFNDEF
macro_nameProcesa instrucciones entre
!IFNDEF
y la siguiente!ELSE
o!ENDIF
si no se define el nombre_de_la_macro.!ELSE
[IF
constant_expressionIFDEF
| macro_name |IFNDEF
macro_name ]Procesa las instrucciones entre
!ELSE
y la siguiente!ENDIF
si la instrucción anterior!IF
,!IFDEF
o!IFNDEF
se evalúa como cero. Las palabras clave opcionales proporcionan un mayor control del preprocesamiento.!ELSEIF
Sinónimo para
!ELSE IF
.!ELSEIFDEF
Sinónimo para
!ELSE IFDEF
.!ELSEIFNDEF
Sinónimo para
!ELSE IFNDEF
.!ENDIF
Marca el final de un bloque
!IF
,!IFDEF
o!IFNDEF
. Si hay texto después de!ENDIF
y en su misma línea, se omite.!UNDEF
macro_nameAnula la definición del nombre_de_la_macro.
Expresiones de preprocesamiento de archivos MAKE
El !IF
o !ELSE IF
constant_expression consta de constantes enteras (en notación decimal o de lenguaje C), constantes de cadena o comandos. Use paréntesis para agrupar expresiones. Las expresiones usan una aritmética de enteros largos con signo de estilo C; los números están en forma de complemento a dos de 32 bits en el intervalo de -2147483648 a 2147483647.
Las expresiones pueden usar operadores que actúan sobre valores constantes, códigos de salida de comandos, cadenas, macros y rutas de acceso del sistema de archivos.
Operadores de preprocesamiento de archivos MAKE
Las expresiones de preprocesamiento de archivos Make pueden usar operadores que actúan sobre valores constantes, códigos de salida de comandos, cadenas, macros y rutas de acceso del sistema de archivos. Para evaluar la expresión, el preprocesador expande primero las macros, luego ejecuta los comandos y después realiza las operaciones. Las operaciones las evalúa en el orden de agrupación explícita entre paréntesis, y después en el orden de precedencia de los operadores. El resultado es un valor constante.
El operador DEFINED
es un operador lógico que actúa sobre el nombre de una macro. La expresión DEFINED( macro_name )
es “true” si el nombre_de_la_macro está definido, aunque no tenga ningún valor asignado. DEFINED
en combinación con !IF
o !ELSE IF
es equivalente a !IFDEF
o a !ELSE IFDEF
. Sin embargo, a diferencia de estas directivas, DEFINED
se puede usar en expresiones complejas.
El operador EXIST
es un operador lógico que actúa en una ruta de acceso del sistema de archivos. EXIST( path )
es “true” si la ruta de acceso existe. El resultado de EXIST
se puede usar en expresiones binarias. Si la ruta de acceso contiene espacios, escríbala entre comillas dobles.
Para comparar dos cadenas, utilice el operador de igualdad (==
) o el de desigualdad (!=
). Escriba las cadenas entre comillas dobles.
Las constantes de tipo entero pueden usar los operadores unarios para la negación numérica (-
), el complemento de uno (~
) y la negación lógica (!
).
Las expresiones pueden usar los siguientes operadores. Agrupamos los operadores que tienen la misma precedencia, y estos grupos se muestran en orden de mayor a menor precedencia. Los operadores unarios se asocian con el operando de la derecha. Los operadores binarios que tienen la misma precedencia asocian los operandos de izquierda a derecha.
Operator | Descripción |
---|---|
DEFINED( macro_name ) |
Produce un valor lógico del estado de definición actual del nombre_de_la_macro. |
EXIST( camino ) |
Produce un valor lógico de la existencia de un archivo en la ruta de acceso. |
! |
NOT lógico unario. |
~ |
Complemento de uno unario. |
- |
Negación unaria. |
* |
Multiplicación. |
/ |
División. |
% |
Módulo (resto). |
+ |
Suma. |
- |
Resta. |
<< |
Desplazamiento bit a bit a la izquierda. |
>> |
Desplazamiento bit a bit a la derecha. |
<= |
Menor o igual que. |
>= |
Mayor o igual que. |
< |
Menor que. |
> |
Mayor que. |
== |
Igualdad. |
!= |
Desigualdad. |
& |
AND bit a bit. |
^ |
XOR bit a bit. |
| |
OR bit a bit. |
&& |
Y lógico. |
|| |
O lógico. |
Nota:
El operador XOR bit a bit (^
) es el mismo que el carácter de escape y se debe reforzar (escribiendo ^^
) cuando se use en una expresión.
Ejecutar un programa en el preprocesamiento
Para usar el código de salida de un comando durante el preprocesamiento, especifique el comando, con cualquier argumento, entre corchetes ([ ]
). Las macros se expanden antes de que se ejecute el comando. NMAKE reemplaza la especificación de comando por el código de salida del comando, que se puede usar en una expresión para controlar el preprocesamiento.
Ejemplo
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF