Qu'est-ce que CC? = Dans un Makefile signifie?
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?
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.