Normalmente, eu recorro normalmente:
recipe-X:
$(MAKE) recipe-Y
No entanto, no MacOS eu uso o recurso de forma diferente:
recipe-X:
ifeq ($(shell uname -s),Darwin)
colima ssh -- make $@
else
<recipe script>
endif
Devo usar $(MAKE)
, ou esse é um caso em que eu realmente deveria make
? Não estou claro sobre as diferenças entre os dois modos neste contexto, e como eles irão interagir. Meu entendimento é que $(MAKE)
é uma macro que propaga paralelismo, ambiente e outras preocupações para o sub-make... mas estou tendo alguns problemas.
O que notei é que $(MAKE)
pode quebrar comandos que, de outra forma, acessariam a rede dentro do vm
propagando as variáveis de ambiente. Mas não tive sucesso com os comandos baseados em rede usando comandos make
.. comuns que funcionam quando eu ssh
entro no vm
e invoco via cli
.
Então, antes de me aprofundar e fazer algo muito inteligente, imaginei que poderia haver uma maneira especial de make
usá-lo para esse propósito.
$(MAKE)
faz três coisas:/my/special/make/bin/make
, mas/my/special/make/bin
não estiver noPATH
anterior/usr/bin
, usar simplemake
to recurse retornará o binário make errado).-n
modo (não construir). Você geralmente quer isso, senão o seumake -n
não diz o que realmente será construído.MAKEFLAGS
variável de ambiente para que possa participar do recurso do jobserver (controle de compilação paralela).Se você for executar o make em um sistema remoto, então definitivamente não vai querer o #3, pois o jobserver é somente local: ele não tem reconhecimento de rede.
Não está claro se você quer o #1 ou não: isso depende de você e do seu ambiente. Isso é especialmente verdadeiro no MacOS, que distribui uma versão muito antiga e quebrada do GNU Make como sua versão "normal", que ninguém deveria usar.
Você também pode querer ou não o #2, dependendo do que essas receitas realmente fazem, mas se quiser isso, você pode obter o mesmo comportamento sem usar
$(MAKE)
se prefixar sua receita com+
.Resumindo, você provavelmente não quer usar
$(MAKE)
nessa situação. Mas você pode ter que fazer algo para emular as partes dele que você QUER.