Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿make dice “No rule to make target”? Rastrea el nodo faltante antes de recompilar

El error nombra un nodo del grafo que no existe o no puede generarse. Conserva los Makefiles cargados, el nombre expandido, el objeto real y la búsqueda de reglas.

Ilustración original: Grafo de un objetivo con un requisito ausente y una arista rota.
Ilustración original: Ilustración original: identifica el nodo faltante. Watch at Ease

El mensaje identifica el primer nodo del grafo que make no pudo encontrar ni construir. Conserva la ortografía exacta y demuestra qué Makefiles y variables lo produjeron; repara una arista, no borres todo el árbol.

La causa puede ser un objetivo pedido que no existe, un requisito ausente, una ruta expandida errónea o la falta de una regla explícita o implícita.

1. Congela el primer fallo del grafo

Guarda el primer diagnóstico completo, con niveles recursivos y nombres entre comillas. Registra pwd -P, comando, make --version, MAKEFLAGS y asignaciones. No empieces con make clean: dependencias generadas y orden de fallo son evidencia.

Sin “needed by”, puede faltar el objetivo de la línea de comandos. Con esa frase, dibuja una sola arista del padre al nodo ausente y sigue primero esa rama.

2. Demuestra qué Makefiles y nombres se cargaron

Usa la base de datos o depuración de solo lectura de la implementación, como GNU make -pn, y guarda los Makefiles leídos. En builds recursivos registra cada directorio de entrada; un make hijo puede usar otro árbol y variables.

Busca la cadena exacta y su padre en la base y fuentes. Revisa overrides de comando/entorno, includes, VPATH, fragmentos generados y configuración. Si el nombre está vacío o tiene espacios extraños, muestra los bytes.

3. Examina el objeto real, no la memoria

Desde el directorio del proceso fallido, inspecciona la ruta expandida con stat, readlink y listado sensible a mayúsculas. Un enlace roto, renombre, diferencia de caso, submódulo sin inicializar o ruta absoluta obsoleta producen el mismo síntoma.

Si el nodo debe generarse, identifica generador, feature gate y regla que declara la salida. No crees un placeholder vacío: puede dejar avanzar el build con bytes inválidos y ocultar al productor que nunca corrió.

4. Demuestra el límite de búsqueda de reglas

Para una fuente existente, corrige la ruta o restaura el archivo revisado. Para un nodo generado, demuestra una regla explícita, patrón válido con stem o regla de inferencia aplicable y todos sus requisitos.

Separa porcentajes literales, variables vacías, opciones de bibliotecas desactivadas y Makefiles generados. Si otra herramienta creó el árbol, corrige su configuración y regenera; no edites archivos desechables.

5. Repara una arista y repite la aceptación

Haz el cambio mínimo justificado: corrige un nombre, restaura una fuente, activa el generador previsto, actualiza una dependencia o regenera desde configuración revisada. Conserva los metadatos anteriores.

Repite la invocación original en el mismo directorio y entorno. Acepta si la regla prevista encuentra o crea el nodo, el padre avanza y una segunda ejecución no-op o incremental es estable. Guarda base antes/después, identidad y artefacto final.

Ilustración original: Cinco comprobaciones desde el directorio hasta la regla.
Ilustración original: Ilustración original: demuestra el grafo antes de recompilar. Watch at Ease