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?

Respuestas:


338

make -C /path/to/dir


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.


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.


11

También puedes usar:

make --directory /path/to/dir

-3

makefile:

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

run:
    ./build/test

o

run:
    ./../build/test

etc.


1
La respuesta perdió por completo la pregunta: se trata de cómo invocar make, no cómo escribir makefile.
Petr
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.