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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top