Какой лучший способ переместить каталог на место в установке Makefile?

В настоящее время я использую обычную технику в своем Makefile для установки отдельных файлов:

install:
    install -D executable ${BIN_DIR}

Но я просто столкнулся с ситуацией, когда мне нужно переместить целый каталог и все файлы под ним на место.

Является ли cp -r лучшим способом или есть ли способ linux-y/unix-y для этого?

Ответ 1

Да, трудно подумать о более unix-ish-способе, который cp -r, хотя -r является относительно поздним дополнением к cp. Я могу рассказать вам, как мы это делали, и это работает аккуратно в файловых системах и т.д.:

Пусть src - исходный каталог, который вы хотите переместить, и /path/to/target - абсолютный путь к цели. Затем вы можете использовать:

$ tar cf - src | (cd /path/to/target; tar xf -)

Ответ 2

Моя версия 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 содержит каталоги, то они не будут скопированы.

Ответ 3

Связывание - еще одна жизнеспособная альтернатива. Это позволит вам поддерживать доступ к нескольким каталогам (представляющим разные версии).