Makefile learning 5 - funciones de llamada y evaluación

I. Introducción

        La función de llamada es una función de referencia que puede personalizar los parámetros de la función. El uso de esta función puede realizar la referencia a la función definida por el usuario. También es posible definir una variable como una expresión compleja y usar la función de llamada para expandirla según diferentes parámetros para obtener diferentes resultados.

        eval expande sus parámetros, y el resultado expandido se usa como parte de Makefile.La función eval los reemplaza y expande de acuerdo con la relación y estructura de sus parámetros.

2. función de llamada

1. Definición

$(call VARIALBLE,PARAM,PARAM,...)

 2. Funciones

        Durante la ejecución, asigne el parámetro "PARAM" a las variables temporales "$(1)", "$(2)" y así sucesivamente, y finalmente obtenga el valor calculado de la expresión "VARIABLE" .

3. Valor de retorno

        Después de que el valor del parámetro "PARAM" reemplaza "$(1)" y "$(2)" a su vez, el valor calculado de la expresión definida por la variable "VARIABLE".

Los ejemplos son los siguientes :

define test
foo:=$(1)
endef

$(warning $(call test,apple))

all:
        @echo foo=$(foo).

结果:
test1.mk:8: foo:=apple
foo=.

        Como se puede ver arriba, la función de la instrucción $(warning $(call test,apple)) es que la función de llamada llama a la expresión "test" y pasa "apple", y el resultado devuelto por la expresión "test" es "foo:=apple", tenga en cuenta que "foo:=apple" es solo un valor de retorno de la función de llamada , cuando make analiza este Makefile, no analizará la declaración "foo:=apple". Entonces, al final, el valor de foo todavía está vacío.

3. La función de evaluación

1. Definición

$(eval ...)

2. Funciones

        La función eval expande sus parámetros, y el resultado expandido se usa como parte de Makefile, y make puede analizar el contenido expandido. El análisis de estas tres frases es el siguiente:

La función "eval" expande sus argumentos :

        La función eval expandirá los parámetros que le siguen. Si hay llamadas indirectas a otras variables, se expandirán juntas aquí para obtener el valor de la expresión o variable final. Los ejemplos son los siguientes:

apple_tree:=3

define test
foo:=$($(1)_tree)
endef

$(warning $(eval $(call test,apple)))

all:
        @echo foo=$(foo).

结果:
test23.mk:8: 
foo=3.

        Como se puede ver arriba, el valor calculado de la expresión devuelta por la función "$(call test,apple)" es "foo:=$(apple_tree)". Entonces, en este momento, "foo:=$(apple_tree)" se usa como parámetro de la función eval, y la función eval lo expandirá para obtener la declaración "foo:=3".

El resultado de la expansión como parte del Makefile :

        La función eval tomará el resultado de la expansión de sus parámetros como parte del Makefile, es decir, make analizará el "resultado de expansión" al analizar el Makefile. Haciendo referencia al ejemplo anterior, después de la operación de expansión de eval, se obtiene "foo:=3", que es la primera operación de la función eval, y la siguiente operación es usar "foo:=3" como parte del Makefile , que son los dos primeros pasos .

make puede analizar el contenido expandido :

        Finalmente, después de que make analiza el Makefile, el valor de foo es 3.

3. Valor de retorno

        El valor de retorno de la función "eval" está vacío o puede que no haya valor de retorno.

3. Resumen

        La función de la función de llamada es tomar los parámetros de la función y expandir las expresiones y variables en la función. El valor de retorno de la función es el resultado después de la expansión. Sin embargo, el resultado expandido no es parte del Makefile. Cuando hacer analiza el Makefile, el análisis no es para él. La función eval primero expande sus parámetros y luego usa el resultado expandido como parte del Makefile, que puede ser analizado por make.

Supongo que te gusta

Origin blog.csdn.net/to_be_better_wen/article/details/130049173
Recomendado
Clasificación