Na verdade, ele está executando o comando, alterando o diretório para some_directory
, no entanto, isso é realizado em um shell de subprocesso e não afeta a marca nem o shell do qual você está trabalhando.
Se você deseja executar mais tarefas some_directory
, precisa adicionar um ponto-e-vírgula e anexar os outros comandos também. Observe que você não pode usar novas linhas, pois elas são interpretadas por make como o fim da regra; portanto, qualquer nova linha usada para maior clareza precisa ser escapada por uma barra invertida.
Por exemplo:
all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c
Observe também que o ponto e vírgula é necessário entre todos os comandos, mesmo que você adicione uma barra invertida e uma nova linha. Isso se deve ao fato de que toda a cadeia é analisada como uma única linha pelo shell. Conforme observado nos comentários, você deve usar '&&' para juntar comandos, o que significa que eles só serão executados se o comando anterior tiver êxito.
all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c
Isso é especialmente crucial ao realizar trabalhos destrutivos, como limpeza, pois, caso contrário, você destruirá as coisas erradas, caso cd
falhe por qualquer motivo.
Um uso comum, porém, é chamar make no subdiretório, no qual você pode procurar. Existe uma opção de linha de comando para isso, para que você não precise se chamar cd
, assim sua regra se pareceria com isso
all:
$(MAKE) -C some_dir all
que mudará para some_dir
e executará o Makefile
lá com o destino "todos". Como prática recomendada, use em $(MAKE)
vez de chamar make
diretamente, pois será necessário chamar a instância make correta (se você, por exemplo, usar uma versão make especial para o seu ambiente de construção), além de fornecer um comportamento ligeiramente diferente ao executar usando certas opções, como -t
.
Para o registro, faça sempre o eco do comando que ele executa (a menos que seja explicitamente suprimido), mesmo que não tenha saída, que é o que você está vendo.
make
, nunca quis alterar o diretório assim. Talvez você deva tentar outra abordagem para sua solução?