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.