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

210

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

user46795
источник

Ответы:

338

make -C /path/to/dir

bmotmans
источник
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 и возвращается туда, где вы были.

EnigmaCurry
источник
11

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

make --directory /path/to/dir
korst1k
источник
-3

Makefile:

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

run:
    ./build/test

или

run:
    ./../build/test

и т.п.

oldpilsbury
источник
1
Ответ полностью пропустил вопрос - речь идет о том, как вызывать make, а не о том, как писать make-файл.
Петр