Makefile learning 5 - funções de chamada e avaliação

I. Introdução

        A função de chamada é uma função de referência que pode personalizar os parâmetros da função. Usando esta função pode realizar a referência à função definida pelo usuário. Também é possível definir uma variável como uma expressão complexa e usar a função de chamada para expandi-la de acordo com diferentes parâmetros para obter resultados diferentes.

        eval expande seus parâmetros, e o resultado expandido é usado como parte do Makefile.A função eval os substitui e os expande de acordo com o relacionamento e a estrutura de seus parâmetros.

2. função de chamada

1. Definição

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

 2. Funções

        Durante a execução, atribua o parâmetro "PARAM" às variáveis ​​temporárias "$(1)", "$(2)" e assim sucessivamente e, finalmente, obtenha o valor calculado da expressão "VARIABLE" .

3. Valor de retorno

        Após o valor do parâmetro "PARAM" substituir "$(1)" e "$(2)" sucessivamente, o valor calculado da expressão definida pela variável "VARIABLE".

Os exemplos são os seguintes :

define test
foo:=$(1)
endef

$(warning $(call test,apple))

all:
        @echo foo=$(foo).

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

        Como pode ser visto acima, a função da instrução $(warning $(call test,apple)) é que a função call chama a expressão "test" e passa em "apple", e o resultado retornado pela expressão "test" é "foo:=apple", observe que "foo:=apple" é apenas um valor de retorno da função de chamada , quando make analisa esse Makefile, ele não analisará a instrução "foo:=apple". Portanto, no final, o valor de foo ainda está vazio.

3. A função de avaliação

1. Definição

$(eval ...)

2. Funções

        A função eval expande seus parâmetros e o resultado expandido é usado como parte do Makefile, e make pode analisar o conteúdo expandido. A análise dessas três frases é a seguinte:

A função "eval" expande seus argumentos :

        A função eval irá expandir os parâmetros que a seguem.Se houver chamadas indiretas para outras variáveis, elas serão expandidas juntas aqui para obter o valor da expressão ou variável final. Os exemplos são os seguintes:

apple_tree:=3

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

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

all:
        @echo foo=$(foo).

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

        Como pode ser visto acima, o valor calculado da expressão retornada pela função "$(call test,apple)" é "foo:=$(apple_tree)". Portanto, neste momento, "foo:=$(apple_tree)" é usado como parâmetro da função eval, e a função eval irá expandi-lo para obter a instrução "foo:=3".

O resultado da expansão como parte do Makefile :

        A função eval pegará o resultado da expansão de seus parâmetros como parte do Makefile, ou seja, o make irá analisar o "resultado da expansão" ao analisar o Makefile. Referindo-se ao exemplo acima, após a operação de expansão de eval, "foo:=3" é obtido, que é a primeira operação da função eval, e a próxima operação é usar "foo:=3" como parte do Makefile , que são as duas primeiras etapas .

make pode analisar o conteúdo expandido :

        Finalmente, depois que make analisa o Makefile, o valor de foo é 3.

3. Valor de retorno

        O valor de retorno da função "eval" está vazio ou pode não haver valor de retorno.

3. Resumo

        A função da call function é pegar os parâmetros da função e expandir as expressões e variáveis ​​na função. O valor de retorno da função é o resultado após a expansão. No entanto, o resultado expandido não faz parte do Makefile. Quando make analisa o Makefile, a análise não é para ele. A função eval primeiro expande seus parâmetros e, em seguida, usa o resultado expandido como parte do Makefile, que pode ser analisado por make.

Acho que você gosta

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