Buena manera de hacer un "cambio" en un Makefile
-
03-07-2019 - |
Pregunta
Estoy experimentando con un sistema de compilación actualizado en funcionamiento; Actualmente, estoy tratando de encontrar una buena manera de configurar compilador & amp; Banderas en función de la plataforma de destino.
Lo que me gustaría hacer es 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 no es compatible con GNU Make. Ahora, mi primer pensamiento fue simplemente hacer
-include $(PLATFORM)_$(BUILD_TYPE)
que es una solución bastante decente, sin embargo, hace que sea difícil obtener una visión general de las diferencias entre los archivos, por no mencionar que estoy deseando escribir & amp; manteniendo unos buenos 60-80 archivos, cada uno de los cuales contiene un conjunto de definiciones de variables.
¿Alguien sabe una mejor manera de lograr esto? Es decir. ¿configurando un conjunto de banderas y otras opciones basadas en otra variable?
Solución
Cambiar a un sistema que lo haga por usted (automake / autoconf) puede ser más simple ...
Otros consejos
Cómo sobre: ??
CFLAGS_Linux_x86_release = -O3
CFLAGS_Linux_x86_debug = -O0 -g
CFLAGS = ${CFLAGS_${PLATFORM}_${BUILD}}
La configuración de dichos parámetros sería la tarea de un script configure
.
Dicho esto, puede consultar la sintaxis de conditionals y funciones condicionales . Por ejemplo, puedes probar lo siguiente:
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
CFLAGS = -O0 -g
endif