В Unix, могу ли я запустить 'make' в каталоге, не перейдя сначала в этот каталог?

145

В Unix я могу запустить "make" в каталоге без cd'ing в этом каталоге?

Теги:
makefile

4 ответа

211
Лучший ответ

make -C /path/to/dir

  • 7
    Grump - это не в стандартном исполнении; это должно быть расширение GNU. Поскольку вы говорите, Linux и Unix, неясно, какой вы хотите, но опция -C не будет работать в Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) или HP-UX 11.23 (/ usr / bin / make). Тем не менее, 1 из 4 не так уж плохо.
  • 6
    Он работает и в BSD make, так что это не просто расширение GNU.
Показать ещё 1 комментарий
77

Как отмечено в других ответах, make (1) имеет для этого параметр -C; несколько команд имеют аналогичные параметры (например, tar). Полезно отметить, что для других команд, которые не имеют таких параметров, можно использовать следующее:

(cd /dir/path && command-to-run)

Выполняет команду в под-оболочке, которая сначала изменила свой рабочий каталог (оставив только рабочий каталог родительской оболочки). Здесь && используется вместо ;, чтобы улавливать ошибки, когда каталог не может быть изменен.

17

Если причина, по которой вы не хотите записывать каталог в каталог, заключается в том, что вам нужно оставаться в текущем каталоге для более поздней задачи, вы можете использовать pushd и popd:

pushd ProjectDir ; make ; popd

Это входит в ProjectDir, запускает make и возвращается туда, где вы были.

3

Также вы можете использовать:

make --directory /path/to/dir

Ещё вопросы

Сообщество Overcoder
Наверх
Меню