web-dev-qa-db-fra.com

Qu'est-ce que cc? = Dans un maquillage signifie?

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

CC?=gcc

Le changer à

CC?=g++

ne le rend pas compilé avec g ++. Le changer à

CC=g++

Est-ce que cela utilise g ++.

Alors je me demande ce que l'opérateur? = Je suppose que cela examine une variable d'environnement pour décider du compilateur à utiliser et s'il n'est pas défini, utilisez ensuite GCC? Toute personne qui peut effacer cela?

26
inquam

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

Il y a un autre opérateur d'affectation pour les variables, `? = '. Ceci s'appelle un opérateur d'affectation variable conditionnel, car il n'a qu'un effet uniquement si la variable n'est pas encore définie. Cette déclaration:

 FOO ?= bar

est exactement équivalent à cela (voir la fonction d'origine):

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

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

33
kennytm

Les ?= Opérateur définit la variable uniquement si elle n'est pas déjà définie: info make* Using Variables* Setting.

5
Marcelo Cantos

Les "?" Moyens de l'opérateur défini s'il n'est pas déjà défini.

Donc, si cc est déjà vide cc? = Le réglera. Si CC contient déjà quelque chose, ce n'est pas le cas.

Source: http://unix.derkeiler.com/mailing-lists/freebsd/Questtions/2007-03/msg02057.html

2
Martin Eve

Comme les 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/implicite-variables.html

D'habitude, CC=cc par défaut. Ensuite, sur Ubuntu 14.04 pour E.G., cc est généralement un lien symbolique à gcc.

Pour désactiver toutes les variables à la fois, voir: Désactiver faire des règles et des variables intégrées à l'intérieur du fichier de fabrication SEMBRE MENEMENT MAINTENANT Impossible.