1. Mensajes de error comunes
make
Durante la ejecución del error no siempre es fatal, especialmente ante la presencia de la línea de comando -
, o make
usando la -k
opción de realizar.
make
Los errores fatales en el proceso de ejecución van precedidos de una cadena ***
. Los mensajes de error tienen el prefijo, uno es la implementación de un nombre de programa como un error de prefijo (generalmente make
); el otro es cuando Makefile
hay un error de sintaxis en sí mismo no se puede make
analizar y ejecutar, los prefijos contienen Makefile
el nombre del archivo y el número de línea de errores.
En la siguiente lista de errores, se omite el prefijo común:
[FOO] Error NN
[FOO] signal description
Tales errores no son make
realmente errores. Representa make
detectado make
como un comando de ejecución de programa que devuelve un estado invocado distinto de cero (Error NN), o un comando para salir del programa de manera irregular (llevando cierta señal).
Si el mensaje de error no tiene ***
cadenas adicionales , se invoca el subproceso falla, si Makefile
el comando tiene un prefijo -
, make
ignorará este error.
- separador faltante.
missing separator. Stop.
missing separator (did you mean TAB instead of 8 spaces?). Stop.
Error: la make
lectura de la línea de comandos no reconocida Makefile
no puede interpretar el contenido que contiene el proceso. GNU make
Leer Makefile
Según varios delimitador ( :
, =
, [TAB]
personajes, etc.) para identificar Makefile
el contenido de cada línea. Estos errores hacen que make
no se pueda encontrar un delimitador válido.
Estos mensajes de error parecen probablemente la razón es que (quizás editor, en su mayoría editores de ms-windows) en Makefile
el uso de cuatro (u ocho) espacios en lugar de antes del [Tab]
carácter de comando . En este caso, se generará la segunda forma de mensaje de error mencionada anteriormente. Y recuerde, todas las filas son comandos deben [Tab]
comenzar con los caracteres.
- los comandos comienzan antes del primer objetivo
commands commence before first target. Stop.
Makefile
Puede basarse en la línea de comando para comenzar: los [Tab]
caracteres comienzan, pero no en una línea de comando legal (por ejemplo, asignar una variable). La línea de comando debe corresponder a la regla uno a uno.
- regla faltante
missing rule before commands. Stop.
La causa del error podría ser que el primer carácter no en blanco de la línea sea un punto y coma, make
pensaría que falta aquí la target: prerequisite
sección de reglas .
- Sin regla
No rule to make target 'XXX'.
No rule to make target 'XXX ', needed by 'yyy'.
No se pueden encontrar reglas adecuadas para el objetivo de reconstrucción "XXX", incluidas reglas explícitas e implícitas.
Este método de corrección de errores es: Makefile
agregar objetivos de reconstrucción de una regla. Otra posible causa es que la causa de estos errores Makefile
en el nombre del archivo esté mal escrito, o destruya el árbol del archivo de origen (un archivo no se puede reconstruir, probablemente debido a problemas de dependencia del archivo).
- Sin objetivos
No targets specified and no makefile found. Stop.
No targets. Stop.
El primer error indica que no es necesario reconstruir el destino designado en la línea de comando y make
no puede leer ningún Makefile
archivo.
El segundo error indica que se pudo encontrar Makefile
el archivo, pero no el objetivo final o ningún objetivo señaló la necesidad de reconstruir la línea de comandos. En este caso, make
no se hace nada.
- Makefile no encontrado.
Makefile 'XXX' was not found.
Included makefile 'XXX' was not found.
No utilizar -f
el Makefile
archivo especificado make
no se puede encontrar de forma predeterminada en el directorio actual Makefile
( makefile
o GNUmakefile
). Utilice -f
el archivo especificado, pero no puede leer el Makefile
archivo especificado .
- comandos primordiales para el objetivo
warning: overriding commands for target 'XXX'
El mismo objetivo XXX
hay más que un comando de reconstrucción. GNU make estipula que cuando se usa el mismo archivo como destino de varias reglas, solo una regla puede definir el comando para reconstruirlo (excepto la regla de los dos puntos). Si se especifican varios comandos iguales o diferentes para un objetivo, se generará la primera alarma;
- ignorando los comandos antiguos para el objetivo
warning: ignoring old commands for target 'XXX'
El mensaje de advertencia dice que el comando recién especificado sobrescribe el último comando especificado.
- dependencia eliminada
Circular XXX <- YYY dependency dropped.
La regla de dependencia produjo un ciclo: XXX
dependencias de destino YYY
y la YYY
lista de dependencias de dependencia también contiene XXX
.
- La variable recursiva se hace referencia a sí misma
Recursive variable 'XXX' references itself (eventually). Stop.
make
La variable de XXX
(expansión recursiva) se refiere a sí misma cuando reemplaza la expansión. Ambos para la variable de expansión directa (mediante :=
o definiciones adicionales definidas) ( +=
), que no están permitidas.
- Referencia de variable no terminada
Unterminated variable reference. Stop.
La sintaxis de referencia de variable o función es incorrecta, no se utilizan paréntesis completos (faltan paréntesis izquierdo o derecho).
- argumentos insuficientes para funcionar
insufficient arguments to function 'XXX'. Stop.
La función XXX
al referirse al número de parámetros es incorrecta. A la función le faltan parámetros.
- errores relacionados con el patrón
missing target pattern. Stop.
multiple target patterns. Stop.
target pattern contains no '%'. Stop.
mixed implicit and static pattern rules. Stop.
Reglas incorrectas del modo estático.
El motivo del primer error es: no hay un objetivo de modo en el segmento de destino de la regla de modo estático;
el motivo del segundo error es: hay varios objetivos de modo en el segmento de destino de la regla de modo estático;
el motivo de la El tercer error es: modo estático El patrón de destino de la regla no contiene el carácter de patrón "%", la
cuarta razón del error es: las tres partes de la regla de patrón estático contienen todas el carácter de patrón "%". Debería ser correcto que solo los dos últimos pueden contener el carácter de patrón "%".
- -jN forzado en submake
warning: -jN forced in submake: disabling jobserver mode.
Se trata de una alarma y se produce el mensaje de alarma: se make
detecta una make
llamada recursiva , la comunicación puede ser un sub- make
error. Realizado de forma recursiva, make
hay un parámetro de línea de comando para -jN
el parámetro (el valor de N es mayor que 1), y en algunos casos esto puede dar lugar a errores,
por ejemplo: Makefile
la variable MAKE
está asignada make –j2
y las variables de la línea de comando se utilizan en una llamada recursiva MAKE
. En este caso, el make
proceso llamado y no otros make
procesos para comunicarse, solo pueden ser dos simples tareas de procesamiento paralelo independientes.
- servidor de trabajo no disponible
warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
Para una make
comunicación real entre procesos, el make
proceso superior pasa información al make
proceso hijo . Hay en el proceso de transmisión de información en este caso puede ser, el make
proceso del niño no es un make
proceso real , mientras que la capa superior make
no puede determinar si el niño es un make
proceso real .
Simplemente transmite toda la información. La capa superior make
utiliza el algoritmo normal para determinar estos. Cuando esto sucede, el proceso hijo solo recibirá parte de la información útil transmitida por el proceso padre. El proceso hijo generará el mensaje de advertencia y luego lo procesará de acuerdo con su secuencia incorporada.