En Unix, ¿puedo ejecutar 'make' en un directorio sin cd'ing a ese directorio primero?

210

En Unix, ¿puedo ejecutarme makeen un directorio sin cdacceder primero a ese directorio?

usuario46795
fuente

Respuestas:

338

make -C /path/to/dir

bmotmans
fuente
8
Grump - eso no está en la marca estándar; Debe ser una extensión GNU. Como dice Linux y Unix, no está claro qué desea, pero la opción -C no funcionará en Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) o HP-UX 11.23 (/ usr / bin / make). Aún así, 1 de cada 4 no es tan malo.
Jonathan Leffler el
66
Funciona también en BSD make, así que no es solo una extensión de GNU.
Chris Dodd
44
asegúrese de que 'C' esté en mayúscula.
m.r226
101

Como se señaló en otras respuestas, make (1) tiene una -C opción para esto; varios comandos tienen opciones similares (por ejemplo, tar). Es útil tener en cuenta que para otros comandos que carecen de tales opciones se puede usar lo siguiente:

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

Esto ejecuta el comando en un sub-shell que primero ha cambiado su directorio de trabajo (mientras deja solo el directorio de trabajo del shell principal). Aquí && se utiliza en lugar de ; detectar casos de error en los que el directorio no se puede cambiar.

Dave C
fuente
22

Si la razón por la que no desea cd a un directorio es porque necesita permanecer en el directorio actual para una tarea posterior, puede usar pushd y popd:

pushd ProjectDir ; make ; popd

Eso va al ProjectDir, ejecuta make y vuelve a donde estabas.

EnigmaCurry
fuente
11

También puedes usar:

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

makefile:

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

run:
    ./build/test

o

run:
    ./../build/test

etc.

Oldpilsbury
fuente
1
La respuesta perdió por completo la pregunta: se trata de cómo invocar make, no cómo escribir makefile.
Petr