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.hqwc.cn/news/690359.html

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

相关文章

git 推送github 选https遇到登录 openSSH问题

使用https需要使用github令牌token作为密码, 使用SSH不需要登录。 还有一个问题: 创建github仓库后没有quick setup页面解决办法 千万不要点击任何多的操作!!!输入仓库名,直接create!&#x…

SPA模式下的多页面跳转原理及实现

jQuery Mobile在SPA模式下的多页面跳转原理及实现案例 文章目录 jQuery Mobile在SPA模式下的多页面跳转原理及实现案例前言一、SPA的实现原理和代码分析1.实现原理说明(1)index.html(2)index.js(3)page2.ht…

华为交换机操作系统VRP的详解

3.1.1 什么是VRP VRP是华为公司从低端到高端的全系列路由器、交换机等数据通信产品的通用网络操作系统,就如同微软的Windows操作系统之于PC,苹果公司的IOS操作系统之于Iphone。VRP可以运行在多种硬件平台之上,并拥有一致的网络界面、用户界面…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…

YOLOv8项目使用说明

1. 下载群公告中的百度云连接,得到一个压缩文件 2. 解压并使用相关软件(如pycharm、VSCode等)打开 3. 选择一个合适的模型yaml文件,及数据集yaml文件进行训练 4. 配置并填入数据集yaml文件 5. 运行即可

嵌入式C语言高级教程:实现基于STM32的无人机飞控系统

无人机飞控系统是无人机的大脑,负责处理来自各种传感器的数据并控制无人机的飞行。本教程将指导如何在STM32微控制器上实现一个基础的无人机飞控系统。 一、开发环境准备 硬件要求 微控制器:STM32F405RGT6,因其高性能和大量的输入输出接口…

03 JavaSE-- 访问控制权限、抽象类/方法、接口、内部类、Object 类

1. 访问控制权限 访问权限控制符不能修饰局部变量。类中的属性和方法访问权限共有四种:private、缺省、protected和public。 private:私有的,只能在本类中访问。缺省:默认的,同一个包下可以访问。protected&#xff1a…

书生浦语训练营第四次课笔记:XTuner 微调 LLM:1.8B、多模态、Agent

文章目录 Finetune 简介微调数据集微调方案 LoRA & QLoRA XTuner 介绍8GB显存玩转LLMInternLM2 1.8B 模型多模态LLM微调动手实战环节 课程文档:https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md Finetune 简介 两种Finetune范式:增…

问题:幂等性 分布式session

web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成,举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页,现在在toTrade请求中使用异步任务编排Completab…

社区团购小程序功能源码系统 带完整的安装代码包以及搭建部署教程

在数字化高速发展的今天,社区团购小程序已经成为连接商家与消费者的重要桥梁。为了满足广大开发者和商家的需求,小编给大家分享一款功能强大的社区团购小程序源码系统,该系统不仅配备了完整的安装代码包,还附有详细的搭建部署教程…

C++笔试强训day18

目录 1.压缩字符串 2.chika和蜜柑 3.01背包 1.压缩字符串 链接 注意细节: 1.数量为一个时不用输出个数 2.当数量超过 9 时,需要逐个拿出 n 的位数,如153次,需要拿出1、5、3三个数 详细代码: class Solution { publ…

导出QQ好友列表、群列表、群员列表

MENU 准备工作在浏览器地址栏中输入地址使用F12快捷键打开开发者工具(浏览器控制台)点击头像登入网站(推荐)或手机扫码登录获取群列表获取好友列表获取群员列表 准备工作 一台带有浏览器的电脑 在浏览器地址栏中输入地址 https://qun.qq.com/member.html 使用F12快捷键打开开发…