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?

È stato utile?

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

Il Makefile usato di git è un buon esempio di Makefile che esegue attività di configurazione non banali nel Makefile stesso (come attivazione del tipo di host). In realtà è abbastanza leggibile e ragionevolmente semplice da usare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top