Tengo un Makefile para un programa en C que tiene la declaración

CC?=gcc

A cambiar a

CC?=g++

NO que se compile con g++. El cambio a

CC=g++

HACE uso de la g++.

Así que me pregunto qué ?= el operador no? Mi conjetura es que se ve en una variable de entorno para decidir qué compilador a usar y si no se establece, a continuación, utilizar gcc? Cualquier persona que puede aclarar esto?

InformationsquelleAutor inquam | 2010-06-03

4 Comentarios

  1. 33

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

    Hay otro operador de asignación
    para las variables `?=’. Esto se llama un
    condicional de la variable de asignación
    operador, porque sólo tiene un
    efecto si la variable no está todavía
    definido. Esta declaración:

     FOO ?= bar

    es exactamente equivalente a este (véase El
    origen de la Función):

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

    Probablemente CC ya está definido como gcc, así CC ?= g++ no reemplazar el existente gcc.

  2. 5

    La ?= operador establece la variable sólo si no está ya establecido: info make* Using Variables* Setting.

  3. 1

    Como han mencionado otros, es probable que ya predefinidos.

    Sobre GNU, usted puede ver lo que está definido con make -p desde un directorio que no contenga un Makefile.

    Esto está documentado en: https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

    Generalmente, CC=cc por defecto. A continuación, en Ubuntu 14.04 para, por ejemplo, cc generalmente es un enlace simbólico a gcc.

    Para deshabilitar todas las variables a la vez ver: Deshabilitar hacer builtin reglas y variables desde el interior del archivo Parece imposible en la actualidad.

Dejar respuesta

Please enter your comment!
Please enter your name here