Qual è il modo migliore per spostare una directory in posizione in un'installazione di Makefile?
Domanda
Attualmente sto usando la solita tecnica nel mio Makefile per installare singoli file:
install:
install -D executable ${BIN_DIR}
Ma ho appena incontrato una situazione in cui ho bisogno di spostare un'intera directory e tutti i file sottostanti in posizione.
cp -r
è il modo migliore o esiste un modo più linux-y / unix-y per farlo?
Soluzione
Sì, è difficile pensare a un modo più unix-ish di cp -r
, sebbene -r sia un'aggiunta relativamente recente a cp
. Posso dirti il ??modo in cui abbiamo usato per farlo, e funziona perfettamente su tutti i filesystem e simili:
Consenti a src
di essere la directory di origine che desideri spostare e / path / to / target
sia un percorso assoluto verso la destinazione. Quindi puoi usare:
$ tar cf - src | (cd /path/to/target; tar xf -)
Altri suggerimenti
La mia versione di install (1)
(Debian) ha:
-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
Quindi se vuoi usare install (1)
in modo coerente in tutto il tuo Makefile puoi fare:
install -d destdir
install srcdir/* -t destdir
-t
non è ricorsivo tuttavia - se srcdir
contiene directory, non verranno copiate.
Il collegamento è un'altra alternativa praticabile. Ciò consentirebbe di mantenere accessibili più directory (che rappresentano versioni diverse).