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?

¿Fue útil?

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

El Makefile utilizado por git es un buen ejemplo de Makefile que realiza tareas de configuración no triviales en el mismo Makefile (como encender el tipo de host). En realidad, es bastante legible y bastante fácil de usar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top