
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_PATH
esté definida y se vea /srv/www/htdocs
así, 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_ROOT
sabe 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 test
comando, 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