Quel est le meilleur moyen de déplacer un répertoire en place dans une installation de Makefile?
Question
J'utilise actuellement la technique habituelle dans mon Makefile pour installer des fichiers individuels:
install:
install -D executable ${BIN_DIR}
Mais je viens de rencontrer une situation dans laquelle je dois déplacer tout un répertoire et tous les fichiers qu'il contient.
Est-ce que cp -r
est le meilleur moyen ou existe-t-il un moyen plus linux-y / unix-y de le faire?
La solution
Oui, il est difficile de penser à une manière plus unix-ish que cp -r
, bien que le -r soit un ajout relativement tardif à cp
. Je peux vous dire comment nous avons utilisé pour le faire, et cela fonctionne parfaitement sur tous les systèmes de fichiers et autres:
Soit src
le répertoire source à déplacer, et / chemin / vers / cible
un chemin absolu vers la cible. Ensuite, vous pouvez utiliser:
$ tar cf - src | (cd /path/to/target; tar xf -)
Autres conseils
Ma version de install (1)
(Debian) a:
-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
Donc si vous voulez utiliser install (1)
de manière cohérente tout au long de votre Makefile, vous pouvez le faire:
install -d destdir
install srcdir/* -t destdir
-t
n'est cependant pas récursif. Si srcdir
contient des répertoires, ils ne seront pas copiés.
La liaison est une autre alternative viable. Cela vous permettrait de garder plusieurs répertoires (représentant différentes versions) accessibles.