Question

J'ai un Makefile pour un programme C qui a la déclaration

CC?=gcc

Modification à

CC?=g++

ne fait pas avec la compilation g ++. il passer à

CC=g++

Ne faire utiliser g ++.

Alors, je me demande ce que le? Opérateur = fait? Je suppose que cela ressemble à une variable d'environnement pour décider quel compilateur à utiliser et si elle est pas définie puis utilisez gcc? Toute personne qui peut effacer cela?

Était-ce utile?

La solution

De http://www.gnu.org/software/make/manual /make.html :

Il y a un autre opérateur d'affectation pour les variables, `? = ». Ceci est appelé affectation d'une variable conditionnelle opérateur, car il ne dispose que d'un effet si la variable est pas encore défini. Cette déclaration:

 FOO ?= bar

est exactement équivalente à ce (voir la origine Function):

 ifeq ($(origin FOO), undefined)
   FOO = bar
 endif

Probablement CC est déjà définie comme gcc, donc CC ?= g++ ne remplacera pas le gcc existant.

Autres conseils

L'opérateur ?= définit la variable que si elle n'est pas déjà. info make ? * Using Variables ? * Setting

Le "?" des moyens opérateurs définis si pas encore défini.

Donc, si CC est déjà CC vide? = Elle sera réglée. Si CC contient déjà quelque chose, il ne sera pas.

Source: http: //unix.derkeiler .com / listes de diffusion / FreeBSD / questions / 2007-03 / msg02057.html

Comme d'autres ont mentionné, il est probablement déjà prédéfini.

Sur GNU, vous pouvez voir ce qui est défini avec make -p à partir d'un répertoire qui ne contient pas de Makefile.

Ceci est documenté à: https: // www. gnu.org/software/make/manual/html_node/Implicit-Variables.html

En général, CC=cc par défaut. Puis sur Ubuntu 14.04 par exemple, cc est généralement un lien symbolique vers gcc.

Pour désactiver toutes les variables à la fois voir: Désactiver les règles et faire builtin les variables de l'intérieur du fichier makefile semble actuellement impossible.

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