Substituant " CC " et " CXX` des variables dans les fichiers makefile

J'ai un master makefile, qui contient les réglages générique, et un enfant makefile qui a des paramètres spécifiques d'un projet.

À partir de mon autre question à propos de la redéfinition de variables dans un fichier makefile, j'ai appris que je peux utiliser le code suivant dans mon maître makefile:

CC ?= avr-gcc
CXX ?= avr-g++

De l'enfant makefile, j'utilise colorgcc et remplacer ces variables:

CC ?= color-avr-gcc
CXX ?= color-avr-g++

Tout fonctionne.

Mais, si je supprime les lignes ci-dessus à partir de mon enfant makefile, faire commence à utiliser gcc et g++ au lieu de avr-gcc et avr-g++.

Je suppose que les deux CC et CXX sont traités différemment, et ils sont fournis avec des valeurs par défaut à faire et je ne suis pas en mesure d'attribuer des valeurs par défaut à l'aide des instructions suivantes:

CC ?= avr-gcc
CXX ?= avr-g++

Mes questions:

  • Est mon hypothèse est correcte?
  • Si oui, est-il un autre moyen de fournir des valeurs par défaut pour CC et CXX dans le maître makefile et le laisser faire de l'utiliser, si je n'ai pas les substituer à l'enfant makefile?

Modifier:

Comme par Chrono Kitsunela suggestion, je n'ai la suite

maître makefile

CC = avr-gcc
CXX = avr-g++
# Add other master macros here.
# Add other master targets here.

enfant makefile

CC ?= color-avr-gcc
CXX ?= color-avr-g++
# There are no child macros or targets

include master.mk

Malheureusement, cela n'a pas fonctionné. Quand je lance make child.mk il est de ramasser le CC et CXX défini dans le maître.

PS: BTW, mon maître makefile est un makefile pour Arduino et le code source complet est disponible dans github.

  • ?= définit la variable SSI il n'est pas déjà défini. Donc, c'est l'opposé de "substitution" d'une variable; il est explicitement ne PAS remplacer la valeur d'une variable si elle est déjà définie. Si vous souhaitez remplacer vous devez utiliser seulement =, pas ?=.
InformationsquelleAutor Sudar | 2013-09-19