Qual é a melhor maneira de mover um diretório no lugar em um Makefile instalar?
Pergunta
Atualmente estou usando a técnica habitual no meu Makefile para instalar arquivos individuais:
install:
install -D executable ${BIN_DIR}
Mas eu só encontrei uma situação onde eu preciso para mover um diretório inteiro e todos os arquivos abaixo dele no lugar.
É cp -r
a melhor maneira ou há uma mais linux-y way / unix-y para fazer isso?
Solução
Sim, é difícil pensar em uma maneira mais unix-ish que cp -r
, embora o -r é uma adição relativamente tarde para cp
. Posso dizer-lhe a maneira que nós usado para fazê-lo, e que funciona perfeitamente entre sistemas de arquivos e tal:
Let src
ser o diretório de origem que você deseja mover, e /path/to/target
ser um caminho absoluto para o destino. Então você pode usar:
$ tar cf - src | (cd /path/to/target; tar xf -)
Outras dicas
A minha versão do install(1)
(Debian) tem:
-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
Então, se você quisesse usar install(1)
de forma consistente em toda a sua Makefile você poderia fazer:
install -d destdir
install srcdir/* -t destdir
-t
não é recursiva no entanto -. Se srcdir
contém diretórios, então eles não são copiados
A vinculação é outra alternativa viável. Isso iria permitir que você mantenha vários diretórios (representando diferentes versões) acessível.