Pregunta

Entonces parece haber este problema con la función $ (comodín) de GNU Make que mantiene un directorio abierto en Windows. Vea la publicación (sin respuesta) " make mantiene abierto un directorio " ;. Google no proporciona mucha información sobre el tema.

En resumen: el Makefile utiliza la función $ (comodín) en algún momento, y mantiene un directorio abierto, lo que generalmente evita que " make clean " regla para hacer su trabajo correctamente. Vuelva a ejecutar " make clean " una segunda vez generalmente lo resuelve.

Estoy usando GNU Make versión 3.81 bajo un DOS-Box estándar. El autor de la publicación vinculada anteriormente está usando Cygwin.

¿Alguien ha encontrado una solución para esto?

¿Fue útil?

Solución 2

Encontré una solución alternativa para el problema, que al menos me permite trabajar en paz.

El problema era que la función $ (comodín) se usaba para recopilar los archivos de origen. Sin embargo, mi regla de limpieza solo elimina un directorio; no es necesario que la recopilación se realice, por favor. Así que básicamente puse la parte del Makefile que necesita para recopilar los archivos de origen en una declaración condicional:

# The clean rule is always parsed
clean:
    rm -rf $(OUTPUT_DIRECTORY)

# The compile rule is only interpreted if we did not invoke 'make clean'. We
# can test the value of $(MAKECMDGOALS) for that:
ifeq ($(filter $(MAKECMDGOALS),clean),)

SOURCE_FILES := $(wildcard ...)

compile:
    g++ $(SOURCE_FILES) ...

endif

Otros consejos

Suena como una fuga de descriptor de archivo, de acuerdo, inofensivo para procesos de muy corta duración (como make) en UNIX, pero un PITA correcto en Windows.

Como supuestamente se trata de un error en la fabricación, en lugar de un problema con su uso, se debe abordar primero al validar que todavía existe cuando se construye desde la fuente en la versión más reciente y luego presentar un informe de error con el proyecto GNU make (o con cualquier distribuidor con el que tenga un contrato de soporte adecuado) ), o sumergirse en la fuente e intentar solucionarlo usted mismo.

No estaría de más intentar reproducir en Linux: aquí es mucho más fácil buscar fugas en el descriptor de archivos, ya que uno puede mirar / proc / self / fd (o, para hijo de make, / proc / $ PPID / fd ) para cosas que no pertenecen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top