¿Cuál es la mejor manera de mover un directorio a su lugar en una instalación de Makefile?
Pregunta
Actualmente estoy usando la técnica habitual en mi Makefile para instalar archivos individuales:
install:
install -D executable ${BIN_DIR}
Pero acabo de encontrar una situación en la que necesito mover un directorio completo y todos los archivos debajo de él en su lugar.
¿Es cp -r
la mejor manera o hay una manera más linux-y / unix-y de hacer esto?
Solución
Sí, es difícil pensar en una forma más unix que cp -r
, aunque -r es una adición relativamente tardía a cp
. Puedo decirle la forma en que usamos para hacerlo, y eso funciona perfectamente en todos los sistemas de archivos y tal:
Deje que src
sea el directorio de origen que desea mover, y / path / to / target
sea una ruta absoluta al objetivo. Entonces puedes usar:
$ tar cf - src | (cd /path/to/target; tar xf -)
Otros consejos
Mi versión de install (1)
(Debian) tiene:
-d, --directory
treat all arguments as directory names; create all components of the specified directories
-t, --target-directory=DIRECTORY
copy all SOURCE arguments into DIRECTORY
Entonces, si desea utilizar install (1)
de manera consistente en todo su Makefile, puede hacer:
install -d destdir
install srcdir/* -t destdir
Sin embargo, -t
no es recursivo; si srcdir
contiene directorios, no se copiarán.
La vinculación es otra alternativa viable. Eso le permitiría mantener múltiples directorios (que representan diferentes versiones) accesibles.