Estou tentando abstrair um prefixo make repetido 9 vezes:
BUILD_CMD := @make O=$(OUTPUT_DIR)/$* \
BR2_EXTERNAL=$(PROJECT_DIR) \
-C $(PROJECT_DIR)/buildroot
e um exemplo de alvo:
%-source: %-config ccache-dir dl-dir
$(BUILD_CMD) source
O problema é que $*
a substituição acontece muito cedo (efetivamente nula), então o diretório de saída está incorreto quando make bcm2836-build
é invocado.
Como posso atrasar a substituição $*
até que o alvo seja avaliado?
Tentei escapar \$\*
, mas não funcionou.
A solução para adiar a substituição de variáveis em um Makefile é usar uma
define
instrução:make
então substitui$*
quando%
você chama seu(s) alvo(s):Não tenho certeza se esta é uma sintaxe específica do buildroot, pois fui inspirado pela leitura da seção 16.2 (O arquivo .mk) do manual do usuário do Buildroot .
Este é um Makefile de nível superior (não .mk) e funciona, então espero que seja útil para outra pessoa, pois é uma construção de abstração muito poderosa para organizar Makefiles!