Was bedeutet CC? = In einem Makefile?
Frage
Ich habe ein Makefile für ein C -Programm mit der Erklärung
CC?=gcc
Wechseln in
CC?=g++
lässt es nicht mit g ++ kompilieren. Wechseln in
CC=g++
Verwendet es G ++.
Also frage ich mich, was der? = Operator tut? Ich vermute, dass es sich um eine Umgebungsvariable befasst, um zu entscheiden, welcher Compiler verwendet werden soll und ob sie nicht eingestellt ist, dann GCC verwenden? Jemand, der das aufklären kann?
Lösung
Aus http://www.gnu.org/software/make/manual/make.html:
Es gibt einen weiteren Zuweisungsoperator für Variablen, "? =". Dies wird als bedingter Operator für variable Zuordnung bezeichnet, da er nur dann einen Effekt hat, wenn die Variable noch nicht definiert ist. Diese Aussage:
FOO ?= bar
entspricht genau dem (siehe die Herkunftsfunktion):
ifeq ($(origin FOO), undefined) FOO = bar endif
Wahrscheinlich CC
ist bereits definiert als gcc
, Also CC ?= g++
Wird das vorhandene nicht außer Kraft setzen gcc
.
Andere Tipps
Das ?=
Der Bediener legt die Variable nur fest, wenn sie noch nicht festgelegt ist: info make
→ * Using Variables
→ * Setting
.
Das "?" Bediener bedeutet festgelegt, wenn nicht bereits eingestellt.
Also, wenn CC bereits leer ist, cc? = Wird es festlegen. Wenn CC bereits etwas enthält, wird dies nicht.
Quelle: http://unix.derkeiler.com/mailing-lists/freebsd/questions/2007-03/msg02057.html
Wie andere erwähnt, ist es wahrscheinlich bereits vordefiniert.
Auf GNU können Sie sehen, was mit definiert ist make -p
aus einem Verzeichnis, das keine enthält Makefile
.
Dies ist dokumentiert bei: https://www.gnu.org/software/make/Manual/html_node/implicit-variables.html
Normalerweise, CC=cc
standardmäßig. Dann auf Ubuntu 14.04 für z. cc
ist normalerweise ein Symlink zu gcc
.
Um alle Variablen gleichzeitig zu deaktivieren, sehen Sie: Deaktivieren Sie in der Datei Made -Datei ausgebaute Regeln und Variablen Scheint derzeit unmöglich.