En realidad, está ejecutando el comando, cambiando el directorio a some_directory
, sin embargo, esto se realiza en un shell de subproceso y no afecta ni a make ni al shell desde el que está trabajando.
Si está buscando realizar más tareas dentro de some_directory
, debe agregar un punto y coma y agregar también los otros comandos. Tenga en cuenta que no puede usar las nuevas líneas, ya que son interpretadas por make como el final de la regla, por lo que cualquier línea nueva que use para mayor claridad debe escapar mediante una barra invertida.
Por ejemplo:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Tenga en cuenta también que el punto y coma es necesario entre cada comando aunque agregue una barra diagonal inversa y una nueva línea. Esto se debe al hecho de que el shell analiza toda la cadena como una sola línea. Como se señaló en los comentarios, debe usar '&&' para unir comandos, lo que significa que solo se ejecutarán si el comando anterior fue exitoso.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Esto es especialmente crucial cuando se realiza un trabajo destructivo, como la limpieza, ya que de lo contrario destruiría las cosas incorrectas, en caso de que cd
falle por cualquier motivo.
Sin embargo, un uso común es llamar a make en el subdirectorio, que es posible que desee examinar. Hay una opción de línea de comando para esto para que no tenga que llamarse a cd
sí mismo, por lo que su regla se vería así
all:
$(MAKE) -C some_dir all
que cambiará some_dir
y ejecutará Makefile
allí con el objetivo "todos". Como práctica recomendada, use en $(MAKE)
lugar de llamar make
directamente, ya que se encargará de llamar a la instancia de make correcta (si, por ejemplo, usa una versión de make especial para su entorno de compilación), así como proporcionar un comportamiento ligeramente diferente al ejecutar usando ciertos interruptores, como -t
.
Para el registro, haga siempre eco el comando que ejecuta (a menos que se suprima explícitamente), incluso si no tiene salida, que es lo que está viendo.
make
, nunca quise cambiar el directorio de esta manera. ¿Quizás debería intentar otro enfoque para su solución?