Bon moyen de faire un “switch” dans un Makefile
-
03-07-2019 - |
Question
Je teste un système de construction mis à jour au travail; actuellement, j'essaie de trouver un bon moyen de définir le compilateur & amp; drapeaux en fonction de la plate-forme cible.
Ce que je voudrais faire est quelque chose comme
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
...
qui n'est pas supporté par GNU Make. Maintenant, ma première pensée a été de faire
-include $(PLATFORM)_$(BUILD_TYPE)
qui est une solution assez décente, cependant, il est difficile d’obtenir une vue d’ensemble des différences entre les fichiers, sans compter que je suis impatient d’écrire & amp; maintenir 60 à 80 fichiers contenant chacun un ensemble de définitions de variables.
Quelqu'un at-il eu l'occasion de connaître un meilleur moyen d'y parvenir? C'est à dire. définir un ensemble d’indicateurs et d’autres options en fonction d’une autre variable?
La solution
Passer à un système qui le fait pour vous (automake / autoconf) peut être plus simple ...
Autres conseils
Que diriez-vous de:
CFLAGS_Linux_x86_release = -O3
CFLAGS_Linux_x86_debug = -O0 -g
CFLAGS = ${CFLAGS_${PLATFORM}_${BUILD}}
La configuration de tels paramètres serait la tâche d’un script configure
.
Cela étant dit, vous pouvez consulter la syntaxe pour conditionals et fonctions conditionnelles . Par exemple, vous pouvez essayer les solutions suivantes:
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_release)
CFLAGS = -O3
endif
ifeq ($(PLATFORM)_$(BUILD_TYPE),Linux_x86_debug)
CFLAGS = -O0 -g
endif