09 - 函数调用

---- 整理自狄泰软件唐佐林老师课程

文章目录

  • 1. 函数定义及调用
    • 1.1 自定义函数的语法
    • 1.2 make 解释器中的预定义函数
      • 1.2.1 预定义函数的调用
      • 1.2.2 问题
      • 1.2.3 本质分析
  • 2. 示例代码

1. 函数定义及调用

  • makefile 中支持函数的概念
    • make 解释器提供了一系列的函数供 makefile 调用
    • 在 makefile 中支持自定义函数实现,并调用执行
    • 通过 define 关键字实现自定义函数

1.1 自定义函数的语法

在这里插入图片描述

.PHONY: testdefine func1@echo "My name is $(0)"
endefdefine func2@echo "My name is $(0)"@echo "Param1 is $(1)"@echo "Param2 is $(2)"
endefvar := $(call func1)
new := $(func1)test:@echo "new => $(new)"@echo "var => $(var)"$(call func1)$(call func2, hello, fool)

在这里插入图片描述

  • 深入理解自定义函数
    • 自定义函数是一个多行变量,无法直接调用
    • 自定义函数是一种过程调用,没有任何的返回值
    • 自定义函数用于定义命令集合,并应用于 规则
    • define 只是定义了多行变量,在 call 函数的作用下将实参替换到对应的位置上去。因此,自定义函数只能用来定义命令集合,并且只能用于规则中。(简而言之,在其他地方调用多行变量只是打印多行变量本身,有 call 的话会替换一下实参)

1.2 make 解释器中的预定义函数

  • make 的函数提供了处理文件名,变量和命令的函数
  • 可以在需要的地方调用函数来处理指定的参数
  • 函数在调用的地方被替换为处理结果

1.2.1 预定义函数的调用

在这里插入图片描述

var := $(abspath ./)test:@echo "var => $(var)"

在这里插入图片描述

1.2.2 问题

  • 为什么自定义函数和预定义函数的调用形式完全不同?

1.2.3 本质分析

  • makefile 中不支持真正意义上的自定义函数
  • 自定义函数的本质是多行变量
  • 自定义函数调用时,实际是预定义的 call 函数在调用,调用时将参数传递给多行变量
  • 自定义函数是 call 函数的实参,并在 call 中被执行,其实本质就是参数替换
.PHONY: testdefine func1@echo "My name is $(0)"
endeffunc2 := @echo "My name is $(0)"test:$(call func1)$(call func2)

func2 是一个普通变量而非一个多行变量,不能被正常处理,所以参数替换没有发生。

在这里插入图片描述

2. 示例代码

【09 - 函数调用】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

资深测试必备技能!TestNG自动化测试框架实战详解

1、TestNG导言 在软件测试工作中,自动测试框架是不可或缺的,之前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不但是单元测试框架,同时也是集成自动…

Nginx反向代理配置

一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应…

Linux下安装mysql8.0(以rpm包安装)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! Linux下安装mysql8.0(以rpm包安装)https://myweb.myskillstree.cn/125.html 目录 1、查操作系统信息 2、下载mysql 8.0.34的rpm包 …

【Anaconda 3 】Jupyter Notebook 的安装配置及使用

Jupyter Notebook 的安装配置及使用 一、引言 Jupyter Notebook 是一种交互式笔记本,它允许用户将代码、注释、方程式、可视化内容等整合到一个文档中,并支持多种编程语言,如 Python、R、Julia 等。它在数据科学、机器学习和教育领域中得到…

Goland GC

Goland GC 引用Go 1.3 mark and sweep 标记法Go 1.5 三色标记法屏障机制插入屏障删除写屏障总结 Go 1.8 混合写屏障(hybrid write barrier)机制总结 引用 https://zhuanlan.zhihu.com/p/675127867 Garbage Collection,缩写为GC,一种内存管理回收的机制…

条件平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、原理概述 条件平差的函数模型和随机模型为: A V + W = 0

大模型时代,程序员如何卷?

最近在看电影《碟中谍7》,该片讲述了特工伊森亨特尝试与一个被称为智体的全能人工智能作战,其可以即时访问任何在线网络,他和他的团队成员试图找回控制人工智能智体所必需的两部分钥匙并将其摧毁的故事。 在剧中,智体是一个虚拟反…

文旅行业| 某景区导游培养和管理项目成功案例纪实

——整合导游资源并进行统一管理,构建完善的培养与管理机制,发挥景区导游价值 【客户行业】文旅行业;景区;文旅企业 【问题类型】人才培养;人员管理 【客户背景】 南方某5A级景区,作为国内极具代表性和特…

【python】python中的argparse模块,教你如何自定义命令行参数

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

【Pip】pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED]解决方案

pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED] 大家好 我是寸铁👊 总结了一篇pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED]✨ 喜欢的小伙伴可以点点关注 💝 报错 今天在安装第三方包时报错如下: 解决方案 本质上是需要指定信任的镜像…

开启异步线程的方法

1,开启异步线程,在启动类上加注解: 2,自定义线程池: Configuration public class PromotionConfig {Beanpublic Executor generateExchangeCodeExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExec…

搜维尔科技:【案例分享】Xsens用于工业制造艺术创新设计平台

用户名称:北京理工大学 主要产品:Xsens MVN Awinda惯性动作捕捉系统 在设计与艺术学院的某实验室内,通过Xsens惯性动作捕捉,对人体动作进行捕捉,得到人体三维运动数据,将捕到的数据用于后续应用研究。…

小心电子合同这个坑:手写签名图片

一、引言 在数字化浪潮的推动下,电子合同因其便捷性和高效性受到广泛应用。然而,在使用电子合同的过程中,一个看似简单的签名方式——手写签名图片,却可能带来意想不到的法律风险。本文将详细解析这一陷阱,并为大家提…

PMP证书好考吗?

PMP新考纲还颠覆了自己旧有的五大知识领域,将原来的五大过程组整合成新领域中过程的一部分,提出了新的商业环境、过程、人员三大知识领域。 最关键的是,在新考纲中明确写到: 重要注意事项。通过工作任务分析开展的研究证实&…

PX4FMU和PX4IO最底层启动过程分析(上)

PX4FMU和PX4IO最底层启动过程分析(上) 主处理器和协处理器的固件烧写和运行过程 PX4FMU:各种传感器数据读取、姿态解算、PWM控制量的计算、与PX4IO通信。负责飞控最主要的工作。 PX4IO(STM32F103):为PIXHA…

大模型面试常考知识点2

文章目录 1. LLM推理attention优化技术KV CachePageAttention显存优化MHA\GQA\MQA优化技术FlashAttention优化技术稀疏Attention1. Atrous Self Attention2. Local Self Attention3. Sparse Self Attention 2. LLM数据处理关键去重多样性保证构造扩充数据充分利用数据 参考文献…

【电路笔记】-无源高通滤波器

无源高通滤波器 文章目录 无源高通滤波器1、概述2、一阶高通滤波器的频率响应3、高通滤波器示例4、二阶高通滤波器5、RC 差异化因素高通滤波器与低通滤波器电路完全相反,因为这两个组件已互换,滤波器输出信号现在从电阻器两端获取。 1、概述 由于低通滤波器只允许低于其截止…

Shell编程之循环语句

目录 1.for循环语句(遍历循环) 1.1 for语句的结构 1.2 for语句的执行流程 1.3 for语句应用示例 1.4 echo命令参数 2.while循环语句 2.1 while语句应用示例 2.2 通过while循环读取行内容 3.until 4.双重循环 4.1 双重循环案例 4.2 循环的退出 …

从零开始详解OpenCV条形码区域分割

前言 在识别二维码之前,首先要划分出二维码的区域,在本篇文章中将从零开始实现二维码分割的功能,并详细介绍用到的方法。 我们需要处理的图像如下: 完整代码 首先我们先放出完整代码,然后根据整个分割流程介绍用到…

基于fastapi sqladmin开发,实现可动态配置admin

1. 功能介绍: 1. 支持动态创建表、类,属性,唯一约束、外键,索引,关系,无需写代码,快速创建业务对象; 2. 支持配置admin显示参数,支持sqladmin原生参数设置,动…