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?
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
.
Les ?=
Opérateur définit la variable uniquement si elle n'est pas déjà définie: info make
→ * Using Variables
→ * Setting
.
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
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.