Evite "rm" en el archivo MAKE

Evite "rm" en el archivo MAKE

Tengo una pregunta sobre una línea en un Makefile. Tengo el objetivo de "limpiar" mi servidor de prueba/ensayo instalado localmente. Actualmente se ve así:

clean:
    rm -rf $(LOCAL_SERVER_PATH)/*

Mientras la variable LOCAL_SERVER_PATHesté definida y se vea /srv/www/htdocsasí, todo está bien. Pero... ¿qué pasa si un usuario cometió un error y escribió mal la definición de la variable, o algún paso de configuración salió mal y se crea el Makefile con una definición incorrecta?

Básicamente, me temo que, por error, podría terminar con un no definido $(LOCAL_SERVER_PATH)y mi objetivo entonces cedería a:

clean:
    rm -rf /*

¿Es posible refactorizar mi Makefile para hacerlo más robusto contra este tipo de errores? No quiero terminar con un Makefile, que potencialmente podría borrar toda mi instalación de Linux (o incluso partes de ella, ya que mi usuario no es 'root').

Respuesta1

Como se indicó, verifique la variable para asegurarse de que no esté vacía:

clean:
    test -n "$(LOCAL_SERVER_PATH)" && rm -rf $(LOCAL_SERVER_PATH)/*

El mismo modismo aparece en una gran cantidad de archivos de especificaciones de RPM, donde parece que se BUILD_ROOTsabe que la variable no está configurada. Dado que su reemplazo no está disponible universalmente (a pesar de los comentarios de hace un tiempo enRe: [Fedora-packaging] ¿Eliminar buildroot?), todavía se puede encontrar aquí y allá.

Respuesta2

En lugar de usar el testcomando, puede probar la variable en el Makefile y comportarse de manera diferente; por ejemplo, mostrar un error al usuario y, por lo tanto, negarse a ejecutar el Makefile:

ifeq (,$(LOCAL_SERVER_PATH))
$(error Set LOCAL_SERVER_PATH variable to run this Makefile)
endif

información relacionada