tutorial make makefile gnu-make

tutorial - makefile ubuntu



¿Hay algún comprobador de pelusas para makefiles? (3)

Sé que hay muchos dinteles para lenguajes de programación, como pep8 para python , pero nunca he encontrado uno para un makefile . ¿Hay tal linters para makefile s?

A medida que crecí en la utilización de un makefile , sigue siendo cada vez más complicado y largo, y para mí tendría sentido tener una guía para mantener el makefile más legible.


Las cosas aparentemente han cambiado. Encontré lo siguiente:

De los dos, Checkmake tiene (a partir de 2018/11) un desarrollo más reciente, pero tampoco lo he intentado.


Lo único que se parece al comportamiento de la lint es la opción de línea de comandos --warn-undefined-variables


Tampoco sé dónde encontrar la pelusa del archivo de make (la búsqueda en la web para "hacer la pelusa del archivo" me consiguió aquí), pero aquí hay una lista incompleta de fragmentos de ideas superficiales para implementar una utilidad de hacer la pelusa del archivo ...

  1. Los espacios en blanco son un aspecto de la legibilidad, ya que las pestañas y los espacios tienen una semántica distinta dentro del archivo make. Emacs makefile-mode por defecto le advierte de líneas "sospechosas" cuando intenta guardar el archivo make con pestañas mal espaciadas. Tal vez sería factible ejecutar emacs en modo batch e invocar las funciones de análisis y verificación desde ese modo. Si alguien tuviera que comenzar a implementar una utilidad de este tipo para crear archivos, el modo lisp de emacs podría ser interesante de verificar.

  2. Acerca de verificar la corrección, @Mark Galeck en su respuesta ya mencionada --warn-undefined-variables . El problema es que hay una gran cantidad de resultados de variables no definidas pero estandarizadas. Para mejorar esta idea, se podría agregar un envoltorio simple para filtrar los mensajes sobre esas variables para que se vean los errores tipográficos reales. En este caso, make podría ejecutarse con la opción --just-print (aka -n o --dry-run ) para no ejecutar los comandos reales para construir los objetivos.

  3. No es una buena idea realizar cambios cuando make se ejecuta con --just-print opción --just-print . Sería útil grep para llamadas a la función $(shell ...) y tratar de hacer que no se cambie nada desde dentro de ellas. La primera iteración de lo que podríamos verificar: $(shell pwd) y algunos otros usos comunes no destructivos están bien, cualquier otra cosa debe invocar una advertencia para la verificación manual.

  4. Podríamos grep para $ no seguido por ( (tal vez algo como [$][^$(][[:space:]] expresado con expresiones regulares POSIX) para detectar casos como $VARIABLE que se analiza como $(V)ARIABLE y es Posiblemente no sea lo que el autor pretende y tampoco es un buen estilo.

El problema con los archivos make es que son muy complejos con todas las construcciones anidadas como $(shell) , $(call) , $(eval) y evaluaciones de reglas; los resultados pueden cambiar desde la entrada desde el entorno o la línea de comandos o desde invocar invocaciones; También hay muchas reglas implícitas u otras definiciones que hacen que cualquier análisis semántico más profundo sea problemático. Pienso que la utilidad de compilación de todo tipo no es factible (excepto que tal vez esté incorporada dentro de la propia utilidad de creación), pero ciertas pautas codificadas y controles heurísticos ya serían de hecho útiles.