Gute Möglichkeit, einen „Schalter“ in einem Makefile zu tun
-
03-07-2019 - |
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?
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