Frage

Ich experimentiere mit einem aktualisierten Build-System bei der Arbeit; zur Zeit, ich versuche, einen guten Weg zu finden, Compiler & Flaggen auf der Zielplattform abhängig einzustellen.

Was ich möchte, ist, etwas zu tun wie

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
     ...

, die nicht von GNU unterstützt werden. Nun, mein erster Gedanke war, nur das tun,

-include $(PLATFORM)_$(BUILD_TYPE)

, die eine ziemlich anständige Lösung ist jedoch, es macht es schwer, einen Überblick zu bekommen, was zwischen Dateien unterscheidet, nicht zu erwähnen, dass ich mich auf Schreiben freu & eine gute 60-80 Dateien beibehalten, die jeweils einen Satz von Variablendefinitionen.

Hat jemand zufällig eine bessere Art und Weise wissen, dies zu erreichen? D. h eine Reihe von Flaggen und anderen Optionen auf eine andere Variable Einstellung?

War es hilfreich?

Lösung

Die Umstellung auf ein System, das es für Sie tut (auto / autoconf) kann einfacher sein ...

Andere Tipps

Wie wäre:

CFLAGS_Linux_x86_release        = -O3
CFLAGS_Linux_x86_debug          = -O0 -g


CFLAGS  = ${CFLAGS_${PLATFORM}_${BUILD}}

solche Parameter konfigurieren wäre die Aufgabe eines configure Skript.

Dass gesagt wird, können Sie die Syntax für conditionals Blick in und bedingte Funktionen . Zum Beispiel könnten Sie versuchen, die folgenden:

ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
    CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
    CFLAGS = -O0 -g
endif

Das Makefile verwendet von git ist ein gutes Beispiel eines Makefiles, die funktionieren nicht-triviale Konfigurationsaufgaben im Makefile selbst (wie beispielsweise Einschalten des Host-Typ). Es ist eigentlich ganz lesbar und relativ einfach zu benutzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top