¿Cuál es el código más simple para obtener la parte del directorio de nivel superior de una variable de archivo MAKE? Ejemplo:
BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>
PD: No quiero decir $(dir $(dir $(BUILD_DIR)))
, pero es algo que obtiene la primera parte del directorio de cualquier valor variable.
dirname /tmp/foo/bar
dará/tmp
odirname foo/bar/baz
daráfoo
/
? ¿Garantizan que el argumento es un camino relativo? ¿Estás asumiendo que GNU make?Respuestas:
¿Te refieres al primer componente del directorio? Si es así, convierta la ruta en una lista de componentes, luego extraiga el primer componente. Supongo que está utilizando GNU make, y no está haciendo algo loco como esperar que los nombres de archivos con espacios en blanco pasen indemnes. No intentes esto con un camino absoluto.
Hago
BUILD_DIR
anular lo que el usuario haya pasado en la línea de comando, para evitar que alguien lo pase accidentalmente y se elimine algo no deseado.fuente
BUILD_DIR
se suponía que era una variable interna, pero tienes razón, todavía existe la posibilidad de que alguien lo configure como algo peligroso. Entonces, aceptando esta respuesta, con la advertencia de que la solución no debe usarse :)override BUILD_DIR = …
Si está seguro de que BUILD_DIR nunca comenzará con un '/':
De lo contrario, es posible que deba tener en cuenta las rutas que comienzan con '/':
O tal vez sea mejor ignorar cualquier ruta que comience con '/'.
fuente
rm -rf
hacerlo más tarde. Definitivamente, volvería a verificar la respuesta que elrootdir
script puede transmitir, para que no termine con un error de sintaxis al darle su scriptrm -rf /
.