243

In Unix, can I run make in a directory without cd'ing to that directory first?

Guy Avraham
  • 3,482
  • 3
  • 38
  • 50
user46795
  • 2,643
  • 3
  • 25
  • 31

5 Answers5

389

make -C /path/to/dir

Svante
  • 50,694
  • 11
  • 78
  • 122
bmotmans
  • 15,650
  • 5
  • 20
  • 14
106

As noted in other answers, make(1) has a -C option for this; several commands have similar options (e.g. tar). It is useful to note that for other commands which lack such options the following can be used:

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

This runs the command in a sub-shell which first has its working directory changed (while leaving the working directory of the parent shell alone). Here && is used instead of ; to catch error cases where the directory can not be changed.

Dave C
  • 7,729
  • 4
  • 49
  • 65
23

If the reason you don't want to cd to a directory is because you need to stay in the current directory for a later task, you can use pushd and popd:

pushd ProjectDir ; make ; popd

That goes into the ProjectDir, runs make, and goes back to where you were.

Robert Siemer
  • 32,405
  • 11
  • 84
  • 94
EnigmaCurry
  • 5,597
  • 2
  • 23
  • 15
11

Also you may use:

make --directory /path/to/dir
korst1k
  • 477
  • 4
  • 11
-4

makefile:

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

run:
    ./build/test

or

run:
    ./../build/test

etc.

  • 3
    The answer completely missed the question - it is about how to invoke make, not how to write makefile. – Petr Jan 15 '19 at 09:42