No Unix, posso executar 'make' em um diretório sem fazer o cd'ing para esse diretório primeiro?

209

No Unix, eu posso rodar makeem um diretório sem cdir primeiro a esse diretório?

user46795
fonte

Respostas:

338

make -C /path/to/dir

bmotmans
fonte
8
Grump - que não está na marca padrão; deve ser uma extensão GNU. Como você diz Linux e Unix, não está claro qual você deseja, mas a opção -C não funcionará no Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) ou HP-UX 11.23 (/ usr / bin / make). Ainda assim, 1 em cada 4 não é tão ruim.
Jonathan Leffler
6
Ele também funciona no BSD make, então não é apenas uma extensão GNU.
Chris Dodd
4
verifique se 'C' está em maiúsculas.
precisa saber é o seguinte
100

Como observado em outras respostas, o make (1) tem uma -C opção para isso; vários comandos têm opções semelhantes (por exemplo, tar). É útil observar que, para outros comandos que não possuem essas opções, o seguinte pode ser usado:

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

Isso executa o comando em um sub shell que primeiro altera seu diretório de trabalho (enquanto deixa o diretório de trabalho do shell pai sozinho). Aqui && é usado em vez de ; capturar casos de erro em que o diretório não pode ser alterado.

Dave C
fonte
22

Se o motivo pelo qual você não deseja fazer o cd para um diretório for porque você precisa permanecer no diretório atual para uma tarefa posterior, use pushd e popd:

pushd ProjectDir ; make ; popd

Isso vai para o ProjectDir, executa make e volta para onde você estava.

EnigmaCurry
fonte
11

Além disso, você pode usar:

make --directory /path/to/dir
korst1k
fonte
-3

makefile:

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

run:
    ./build/test

ou

run:
    ./../build/test

etc.

Oldpilsbury
fonte
1
A resposta errou completamente a pergunta - é sobre como chamar make, não como escrever makefile.
Petr