Boa maneira de fazer um “switch” em um Makefile
-
03-07-2019 - |
Pergunta
Eu estou experimentando com um sistema de compilação atualizada no trabalho; Atualmente, estou tentando encontrar uma boa maneira de conjunto compilador & bandeiras, dependendo da plataforma de destino.
O que eu gostaria de fazer é algo como
switch $(PLATFORM)_$(BUILD_TYPE)
case "Linux_x86_release"
CFLAGS = -O3
case "Linux_x86_debug"
CFLAGS = -O0 -g
case "ARM_release"
CC = armcc
AR = armlink
CFLAGS = -O2 -fx
...
que não é suportado por GNU make. Agora, meu primeiro pensamento foi apenas para fazer
-include $(PLATFORM)_$(BUILD_TYPE)
que é uma solução bastante decente, no entanto, torna-se difícil obter uma visão geral do que difere entre os arquivos, para não mencionar que eu estou ansioso para escrever e manter uma boa 60-80 arquivos, cada um contendo um conjunto de definições de variáveis.
Alguém por acaso sabe a melhor maneira de conseguir isso? Ou seja, definindo um conjunto de bandeiras e outras opções com base em outra variável?
Solução
A mudança para um sistema que faz isso por você (automake / autoconf) pode ser mais simples ...
Outras dicas
Como sobre: ??
CFLAGS_Linux_x86_release = -O3
CFLAGS_Linux_x86_debug = -O0 -g
CFLAGS = ${CFLAGS_${PLATFORM}_${BUILD}}
Configuração de tais parâmetros seria a tarefa de um script configure
.
Dito isto, você pode olhar para a sintaxe para condicionais e funções condicionais . Por exemplo, você pode tentar o seguinte:
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
CFLAGS = -O0 -g
endif