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


210

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

Ответы:


338

make -C /path/to/dir


8
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.
Крис Додд

4
убедитесь, что «С» в верхнем регистре.
m.r226

101

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

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

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


22

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

pushd ProjectDir ; make ; popd

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



-3

Makefile:

all:
    gcc -Wall -Wpedantic -std=gnu99 -g src/test.c -o build/test

run:
    ./build/test

или

run:
    ./../build/test

и т.п.


1
Ответ полностью пропустил вопрос - речь идет о том, как вызывать make, а не о том, как писать make-файл.
Петр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.