Buon modo per fare un interruttore & # 8220; & # 8221; in un Makefile
-
03-07-2019 - |
Domanda
Sto sperimentando un sistema di build aggiornato al lavoro; attualmente, sto cercando di trovare un buon modo per impostare compilatore e amp; flag a seconda della piattaforma di destinazione.
Quello che vorrei fare è qualcosa di simile
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
...
che non è supportato da GNU Make. Ora, il mio primo pensiero è stato semplicemente di fare
-include $(PLATFORM)_$(BUILD_TYPE)
che è una soluzione abbastanza decente, tuttavia, rende difficile avere una panoramica di ciò che differisce tra i file, per non parlare del fatto che non vedo l'ora di scrivere & amp; mantenendo un buon 60-80 file, ognuno contenente una serie di definizioni variabili.
Qualcuno capisce un modo migliore per raggiungere questo obiettivo? Cioè impostare un set di flag e altre opzioni basate su un'altra variabile?
Soluzione
Il passaggio a un sistema che lo fa per te (automake / autoconf) potrebbe essere più semplice ...
Altri suggerimenti
Che ne dici di:
CFLAGS_Linux_x86_release = -O3
CFLAGS_Linux_x86_debug = -O0 -g
CFLAGS = ${CFLAGS_${PLATFORM}_${BUILD}}
La configurazione di tali parametri sarebbe compito di uno script configura
.
Detto questo, puoi esaminare la sintassi per conditionals e funzioni condizionali . Ad esempio, potresti provare quanto segue:
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
CFLAGS = -O0 -g
endif