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?

Était-ce utile?

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

Le Makefile utilisé git est un bon exemple de fichier Makefile qui effectue des tâches de configuration non triviales dans le fichier Makefile lui-même (comme activer le type d’hôte). Il est en fait assez lisible et relativement simple à utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top