• 第9课


    1. makefile中的函数

    (1)make 解释器提供了一系列的函数供makefile 调用 预定义函数/库函数

    (2)在 makefile支持自定义函数实现,并调用执行自定义函数

    (3)通过 define 关键字实现自定义函数

    2. 在 makefile 中自定义函数

    2.1 自定义函数的语法

    函数定义:

         

      其中,$(0) 代表被调用的函数名$(1),   $(2),  $(3)... 代表调用函数时后面的传参

    函数调用:

        

    2.2 深入理解自定义函数

    (1)自定义函数本质是一个多行变量,无法直接调用,需要使用 call 关键字,$(call func , param1, param2, ...)  首先将参数传递到多行变量里的命令中,然后将命令原地展开

    (2)自定义函数是一种过程调用没有任何的返回值函数和过程是两种东西,C 语言中进行了统一,加 return函数,不加 return 是过程

    (3)自定义函数用于定义命令集合,并应用于规则中。

    实验1:自定义函数的使用】

    复制代码
     1 # 演示自定义函数的使用
     2 
     3 .PHONY : test
     4 
     5 define func1
     6     @echo "My name is $(0)"
     7 endef
     8 
     9 define func2
    10     @echo "my name is $(0)"
    11     @echo "param 1 => $(1)"
    12     @echo "param 2 => $(2)"
    13 endef
    14 
    15 test :
    16     $(call func1)
    17     $(call func2, swj, cool)
    18 
    19 # 输出结果
    20 My name is func1
    21 my name is func2
    22 param 1 =>  swj
    23 param 2 =>  cool
    复制代码

     【实验2:深入理解自定义函数】

    复制代码
     1 .PHONY : test
     2 
     3 define func1
     4     @echo "My name is $(0)"
     5 endef
     6 
     7 test :
     8     $(call func1)
     9     $(func1)
    10 
    11 # 输出结果:注意两者的区别,call会传参后原地展开,多行变量不会传参直接原地展开
    12 My name is func1
    13 My name is 
    复制代码

     

    3. make 解释器中的预定义函数

    3.1 预定义函数的概念

    (1)make函数提供了处理文件名、变量和命令函数

    (2)可以在需要的地方调用函数来处理指定的参数

    (3)函数调用的地方被替换为处理结果

    3.2 预定义函数的调用

      

     

    3.3 自定义函数预定义函数差别

    (1)makefile 不支持真正意义上的自定义函数自定义函数只是 call 函数实参并在 call 中执行

    (2)自定义函数本质多行变量

    (3)预定义的 call 函数调用时将参数传递给多行变量call 的对象必须为多行变量,否则不起作用,不会传递参数)

    编程实验

     1 .PHONY : test
     2 
     3 define func1
     4     @echo "My name is $(0)"
     5 endef
     6 
     7 define func2
     8     @echo "My name is $(0)"
     9 endef
    10 
    11 var1 := $(call func1)
    12 var2 := $(call func2)
    13 var3 := $(abspath ./)
    14 
    15 test :
    16     @echo "var1 => $(var1)"
    17     @echo "var2 => $(var2)"
    18     @echo "var3 => $(var3)"



    运行结果:
    var1 => @echo My name is func1 var2 => @echo My name is func2 var3 => /home/swj/12-plan/makefile/lesson-9

    4. 小结

    (1)make 解释器提供了一系列的函数供makefile 调用 (预定义函数/库函数)

    (2)自定义函数本质是一个多行变量,无法直接调用,

    (3)自定义函数用于定义命令集合,并应用于规则中。

    (4)预定义的 call 函数调用时将参数传递给多行变量call 对象必须为多行变量,否则不起作用,不会传递参数)

    (5)makefile 中不支持真正意义上的自定义函数自定义函数只是 call 函数实参并在 call 中执行

  • 相关阅读:
    今日总结
    今日总结
    今日总结
    k8s controller
    深入k8s:Informer使用及其源码分析
    理解 K8S 的设计精髓之 List-Watch机制和Informer模块
    Unix domain socket 简介
    Linux网络编程——端口复用(多个套接字绑定同一个端口)
    DPVS Tutorial
    dpvs route RTF_KNI
  • 原文地址:https://www.cnblogs.com/hoiday/p/9265719.html
Copyright © 2020-2023  润新知