Чи можна в Unix запустити "make" в каталозі без cd'ing спочатку до цього каталогу?


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
переконайтеся, що "C" у верхньому регістрі.
m.r226

101

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

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

Це запускає команду в підколонці, яка спочатку змінює свій робочий каталог (залишаючи робочий каталог батьківської оболонки в спокої). Тут && використовується замість того, ; щоб виловлювати випадки помилок, коли каталог неможливо змінити.


22

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

pushd ProjectDir ; make ; popd

Це входить у ProjectDir, запускає make і повертається туди, де ви були.


11

Також ви можете використовувати:

make --directory /path/to/dir

-3

makefile:

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

run:
    ./build/test

або

run:
    ./../build/test

тощо.


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