Compartir a través de


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. En Tools.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 actualiza MAKEFLAGS; los cambios se heredan durante la recursividad si MAKEFLAGS se especifica.

  • !ERRORMensaje de texto

    Muestra 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.

  • !MESSAGEMensaje de texto

    Muestra 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 macro INCLUDE, que se establece inicialmente en la variable de entorno INCLUDE. Resulta útil pasar valores .SUFFIXES, .PRECIOUS y reglas de inferencia a los archivos Make recursivos.

  • !IFconstant_expression

    Procesa instrucciones entre !IF y la siguiente !ELSE o !ENDIF si la expresión_constante se evalúa como un valor distinto de cero.

  • !IFDEFmacro_name

    Procesa instrucciones entre !IFDEF y la siguiente !ELSE o !ENDIF si se define el nombre_de_la_macro. Una macro en null se considera definida.

  • !IFNDEFmacro_name

    Procesa instrucciones entre !IFNDEF y la siguiente !ELSE o !ENDIF si no se define el nombre_de_la_macro.

  • !ELSE[ IF constant_expression IFDEF | 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.

  • !UNDEFmacro_name

    Anula 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

Vea también

Referencia de NMAKE