2010-06-03 27 views
22

Ich habe ein Makefile für ein C-Programm, das die ErklärungWas bedeutet CC? = In einem Makefile?

CC?=gcc 

Ändern es zu

hat
CC?=g++ 

nicht, es mit g machen ++ kompilieren. Ändern sie zu

CC=g++ 

macht es g ++.

Also frage ich mich, was der? = Operator tut? Meine Vermutung ist, dass es eine Umgebungsvariable betrachtet, um zu entscheiden, welcher Compiler verwendet wird, und wenn es nicht gesetzt ist, dann benutze gcc? Wer kann das klären?

Antwort

29

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

Es gibt eine andere Zuweisungsoperator für Variablen, `‚=. Dies wird Bedingungsvariable Zuweisung Operator genannt, weil es nur einen Effekt hat, wenn die Variable noch nicht definiert ist. Diese Aussage:

FOO ?= bar 

entspricht genau dies (siehe Den Ursprung Function):

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

Wahrscheinlich CC bereits als gcc definiert ist, wird so CC ?= g++ die bestehenden gcc nicht außer Kraft setzen.

5

Der ?= Bediener setzt die Variable nur dann, wenn sie nicht bereits gesetzt ist: info make* Using Variables* Setting.

0

Wie andere schon erwähnt, ist es wahrscheinlich bereits vordefiniert.

Auf GNU können Sie sehen, was mit make -p aus einem Verzeichnis, das kein Makefile enthält, definiert ist. Normalerweise CC=cc standardmäßig https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

:

Dies wird an dokumentiert. Dann ist unter Ubuntu 14.04 zum Beispiel cc normalerweise ein Symlink zu gcc.

Um alle Variablen auf einmal zu deaktivieren, siehe: Disable make builtin rules and variables from inside the make file Scheint derzeit unmöglich.

Verwandte Themen