Каков наилучший способ переместить каталог на место при установке Makefile?
Вопрос
В настоящее время я использую обычную технику в моем Makefile для установки отдельных файлов:
install:
install -D executable ${BIN_DIR}
Но я только что столкнулся с ситуацией, когда мне нужно переместить весь каталог и все файлы под ним на место. Р>
Является ли cp -r
лучшим способом или есть более удобный способ Linux-y / unix-y сделать это?
Решение
Да, трудно придумать более unix-ish способ, чем cp -r
, хотя -r является относительно поздним дополнением к cp
. Я могу рассказать вам, как мы использовали для этого, и это прекрасно работает в файловых системах и тому подобном:
Пусть src
будет исходным каталогом, который вы хотите переместить, а / path / to / target
будет абсолютным путем к цели. Тогда вы можете использовать:
$ tar cf - src | (cd /path/to/target; tar xf -)
Другие советы
Моя версия install (1)
(Debian) содержит:
-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
Итак, если вы хотите использовать install (1)
в вашем Makefile, вы можете сделать это:
install -d destdir
install srcdir/* -t destdir
-t
, однако, не является рекурсивным - если srcdir
содержит каталоги, они не будут скопированы.
Связывание - еще одна жизнеспособная альтернатива. Это позволит вам поддерживать доступность нескольких каталогов (представляющих разные версии).