【Linux】Makefile
Makefile常用用法介绍。
部分图片和经验来源于网络,还有正点原子的Linux驱动开发教程,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。
专栏目录:记录自己的嵌入式学习之路-CSDN博客
1 简单定义
Makefile是一个包含了一系列指令的文件,这些指令定义了如何编译和链接程序。Makefile被make命令使用,make是一个构建自动化工具,它根据Makefile中定义的规则来决定哪些文件需要重新编译。
2 基本结构
一个基本的Makefile包含以下部分:
(1) 目标(Targets):通常是文件名,表示要生成的文件。
(2) 依赖(Dependencies):目标文件依赖的文件列表。
(3) 命令(Commands):生成目标文件需要执行的命令序列。
这个Makefile做了以下几件事:
- 定义了一个名为all的伪目标,它依赖于hello目标。
- hello目标依赖于hello.o文件,并且定义了如何从hello.o生成hello可执行文件。
- hello.o目标依赖于hello.c源文件,并且定义了如何从hello.c编译生成hello.o对象文件。
编译时使用make all命令,这个命令告诉make去查找Makefile,并执行all目标下的指令。make会检查文件的修改时间,如果hello.o或hello.c被修改过,它会重新编译这些文件。
3 MAKEFILE中的变量
3.1 变量的赋值
(1) = 赋值
= 赋值相当地址赋值,每次拿出来的值都以最新的值为准,如下图打印的值应该为zuozhongkai。
(2) := 赋值
:= 赋值就是正常的赋值,以赋值时候的值为准,如下图的结果就是zzk。
(3) ?= 赋值
curname ?= zuozhongkai
上述代码的意思就是,如果变量curname前面没有被赋值,那么此变量就是“zuozhongkai”,如果前面已经赋过值了,那么就使用前面赋的值。
(4) += 追加赋值
3.2 变量的引用
在Makefile中,变量通过$(变量名)来引用。
3.3 自动化变量
3.4 CC变量
CC变量存储编译器的名称,值通常为gcc。
3.5 CFLAGS变量
CFLAGS变量用于存储编译选项。
4 模式规则
目标中的“%”表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c结尾的文件,类似与通配符,a.%.c就表示以a.开头,以.c结束的所有文件。
当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值。
模式规则基本都要配合自动化变量才能够使用。因为文件名一直在变化。
5 伪目标
若有非编译的命令,如clean、all等,最好将其声明为伪目标,语法如下:
.PHONY : clean
使用伪目标可以避免文件中有同名文件时出现的问题:当目录中有一个文件就叫clean,那么如果没有声明伪目标,clean下的命令就因为clean没有依赖文件变化而不运行。加了伪目标就可以保证clean一定运行。
6 条件语句
Makefile中的条件语句有ifeq、ifneq、ifdef、ifndef。其中ifeq用来比较两值是否相等,有n的就是比较其是否不相等。
7 Kbuild
Kbuild是Linux内核的官方构建系统,它基于GNU Make。Kbuild通过预定义一系列的变量和目标,使得内核的编译和模块的构建变得简单。
7.1 核心变量
(1) obj-y:用于定义编译进内核的目标文件(.o文件)。如果一个文件被添加到obj-y,它将被编译并链接到最终的内核映像中。
(2) obj-m:用于定义编译成模块的目标文件。这些文件将被编译成.ko文件,可以作为模块加载到内核中。
(3) <user_prog>-y或<user_prog>-objs:表示<user_prog>的依赖为后面的内容。如:
obj-m := led.o
led-y := hello.o leddriver.o
上面的语句表示最终要编译led.ko这个模块,而这个模块由hello.c和leddriver.c两个编译出来。实际上led.c反而是不需要存在的。
注:要想其编译一些别的文件夹下的源文件,可以加上路径,例如:
MODULE_NAME := ../../out/adc
KERN_DIR := /home/<user_name>/Source/kernel_source_emmc_flash
obj-m := $(MODULE_NAME).o
$(MODULE_NAME)-objs := adc_driver.o ../Utilities/utility.o
7.2 make过程中的常用参数
-C <path>:表示在编译前先将当前工作目录改到path路径,一般path都是内核源码的路径。我的理解是相当于跳转到内核源码里面,引用它里面的Makefile。
M=<path>:这个表示要编译的模块的源码,就是说告诉make,我要编译的模块的源码是path。若不给出O=<path>,那么默认编译得到的.o/.ko文件将被放到M指定的模块源码路径中。
O=<path>:指定输出文件的路径。
module:make命令后加上module表示将Makefile文件中obj-m的部分编译了,同时编译那些依赖于obj-m的obj-y文件,不依赖于obj-m的不编译,应该是这样。要是直接执行make,不加module的话只会编译obj-y的目标文件。
ARCH=<arch>:指定目标平台的架构,arch为arm时说明目标架构为arm。
CROSS_COMPILE:交叉编译器的前缀,指定了使用哪些交叉编译器工具链。
其实ARCH和CROSS_COMPILE两个都可以直接在Makefile中直接指定,而不是在使用make命令的时候指定。
其实,无论是O=、M=、ARCH=还是CROSS_COMPILE=,本质上只是在命令行中指定Makefile文件中指定变量的值而已,和在Makefile文件中修改区别不大,但是Makefile可以通过ifeq ("$(origin O)", "command line")来判断这个值是否来自于命令行的指定。
8 Makefile技巧
8.1 无视错误继续执行
若某些命令哪怕错误也要继续执行下面的任务,就在这个命令前加上“-”,如:
all:-make cleanecho “无论前面是否执行成功都会输出这行”
8.2 利用命令的输出
$(shell <cmd>)
这样得出来的就是命令的输出值,就像$(shell pwd)得到的就是执行pwd的结果,即当前路径。
8.3 三元if函数
$(if <condition>, <then-part>, <else-part>)
8.4 替换函数
$(patsubst <pattern>,<replacement>,<text>)
此函数用于在 text中查找符合 pattern的部分,如果匹配的话就用 replacement替换掉。pattern是可以包含通配符“%”,如果 replacement 中也包含通配符“%”,那么 replacement 中的这个“%”将是 pattern中的那个“%”所代表的字符串。
【注意】:千万不要在任何,后面加空格,会被视为内容的一部分。
8.5 数值的硬拼接
CUR_DIR := $(shell pwd)/..
相当于给路径加了个/..,需要注意的是/前面千万不能有空格,不然就相当于拼接多了一个空格。
8.6 数值的项目增加
PHONY += AAA
PHONY += BBB
就是将不同的项目合起来在一起,最后PHONY的值就是“AAA BBB”
8.7 项目Make编译的常见清理命令
(1) make clean
这个目标通常用于删除大多数生成的文件,但保留一些基础文件,以便可以快速重新构建项目,特别是外部模块。
通常保留的文件包括配置脚本生成的配置文件,因为重新生成这些文件可能需要用户输入或复杂的检测过程。
make clean 旨在减少构建准备时间,同时避免删除需要额外工作才能重新生成的文件。
(2) make mrproper
这个目标删除当前配置的所有生成文件,包括make clean保留的文件。
mrproper 通常删除所有由配置过程生成的文件,如配置日志和 config.h 文件,这意味着你需要重新运行配置脚本来重新生成这些文件。
这个目标用于确保构建过程从完全干净的状态开始,没有任何旧的构建生成的文件。
(3) make distclean
这个目标除了执行make mrproper的操作外,还会删除额外的文件,如编辑器备份文件、补丁应用后的遗留文件等。
distclean 旨在确保分发包(tarball)中的文件在提取后,构建环境与原始开发者的构建环境完全一致。
这个目标用于维护一个干净的源代码树,准备进行版本控制更新或分发源代码。
9 其他注意事项
命令列表中的每条命令必须以TAB键开始,不能使用空格!
10 其他注意事项
一些优秀的Makefile相关博客:
linux内核模块编译makefile - 裸睡的猪 - 博客园https://www.cnblogs.com/ggzhangxiaochao/p/13358941.htmlmake命令的参数选项(执行make时可以添加哪些选项)_make 参数-CSDN博客
https://blog.csdn.net/oqqHuTu12345678/article/details/125630342
相关文章:
【Linux】Makefile
Makefile常用用法介绍。 部分图片和经验来源于网络,还有正点原子的Linux驱动开发教程,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 1…...
【工具】Windows批量文件复制教程:用BAT脚本自动化文件管理
一、引言 在日常开发与部署过程中,文件的自动化复制是一个非常常见的需求。无论是在构建过程、自动部署,还是备份任务中,开发者经常需要将某个目录中的 DLL、配置文件、资源文件批量复制到目标位置。相比使用图形界面的复制粘贴操作…...
字节一面:后端开发
前言 这是我字节一面的回忆录,可能有些不全。 由于博主是Java面试Go岗,操作系统和计网问的还是比较多。 个人感觉字节很喜欢追问,博主被追问拷打的找不到北了,总结还是学的太浅了。 面试官给我的建议:再更深挖一些…...
西式烹饪实训室建设路径
在餐饮行业持续变革与教育信息化快速发展的当下,西式烹饪实训室的智能化建设成为提升教学质量、培养适应新时代需求烹饪人才的关键举措。通过引入先进技术,创新教学与管理模式,为学生打造更高效、更具沉浸感的学习环境。凯禾瑞华——实训室建…...
[更新完毕]2025五一杯A题五一杯数学建模思路代码文章教学:支路车流量推测问题
完整内容请看文章最下面的推广群 支路车流量推测问题 摘要 本文针对支路车流量推测问题展开研究,通过建立数学模型解决不同场景下的车流量分析需求。 针对问题一(Y型道路场景),研究两支路汇入主路的车流量推测。通过建立线性增长…...
2025年五一杯C题详细思路分析
C题 社交媒体平台用户分析问题 问题背景 近年来,社交媒体平台打造了多元化的线上交流空间和文化圈,深刻影响着人们社交互动与信息获取。博主基于专业知识或兴趣爱好等创作出高质量内容,吸引并获得用户的关注。用户可以随时通过观看、点赞、…...
攻防世界 dice_game
dice_game dice_game (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file game game: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]254…...
如何进行 JVM 性能调优?
进行 JVM 性能调优是一个系统性的过程,旨在提高 Java 应用程序的响应速度、吞吐量、降低资源消耗(如 CPU 和内存)以及提高稳定性。 以下是一个通用的 JVM 性能调优步骤和常用方法: 第一步:明确目标与建立基线 (Defin…...
艺华直播 5.0 |专注于提供港澳台及央视频道的电视直播应用,加载快,播放流畅
艺华直播是一款专注于提供港澳台及央视频道的电视直播应用。它以加载速度快、播放流畅不卡顿著称,是目前少数能够稳定观看港澳台频道的应用之一。此次分享的版本为测试版,支持4K秒播,带来极致的观看体验。尽管该应用已开始收费,但…...
【软件设计师:复习】上午题核心知识点总结(三)
一、编译原理(基础题) 1.编译过程概述(必考) 编译过程分为六个阶段,各阶段核心任务与典型输出如下: 阶段核心任务输入输出关键方法/工具词法分析将字符流转换为标记(Token)流源代码字符串Token序列(如<ID, "x">)正则表达式、有限自动机(DFA/NFA)…...
SAE极速部署弹性微服务商城——实验记录
SAE极速部署弹性微服务商城 本实验带您体验在SAE上快速部署一个弹性的在线商城微服务应用,使得终端用户可以通过公网访问该商城,并进行压力测试以验证其性能与稳定性。 文章目录 SAE极速部署弹性微服务商城使用SAE部署应用有哪些优势? 对商城…...
内存 “舞台” 上,进程如何 “翩翩起舞”?(转)
在数字世界里,计算机的每一次高效运转都离不开内存与进程的默契配合。内存,恰似一座宏大且有序的舞台,为进程提供了施展拳脚的空间。而进程,则如同舞台上的舞者,它们在内存的舞台上,遵循着一套复杂而精妙的…...
产品手册小程序开发制作方案
公司产品手册小程序系统主要是为了解决传统纸质或PDF格式手册更新成本高、周期长,难以及时反映最新产品信息。线下分发效率低,线上分享体验差,不利于品牌推广。传统手册单向传递信息,无法与用户进行互动,企业难以了解用…...
【dify—8】Agent实战——占星师
目录 一、创建Agent应用 二、创建提示词 三、创建变量 四、添加工具 五、发布更新 六、运行 第一部分 安装difydocker教程:【difydocker安装教程】-CSDN博客 第二部分 dock重装教程:【dify—2】docker重装-CSDN博客 第三部分 dify拉取镜像ÿ…...
Redis的键过期删除策略与内存淘汰机制详解
Redis 的键过期删除策略与内存淘汰机制详解 一、键过期删除策略 Redis 通过 定期删除(Active Expire) 和 惰性删除(Lazy Expire) 两种方式结合,管理键的过期清理。 1. 惰性删除(Lazy Expire) …...
数据结构——树(中篇)
今日名言: 人生碌碌,竞短论长,却不道枯荣有数,得失难量 上次我们讲了树的相关知识,接下来就进一步了解二叉树吧。本文为个人学习笔记,如有侵权,请 联系删除,如有错误,欢…...
实验三 软件黑盒测试
实验三 软件黑盒测试使用测试界的一个古老例子---三角形问题来进行等价类划分。输入三个整数a、b和c分别作为三角形的三条边,通过程序判断由这三条边构成的三角形类型是等边三角形、等腰三角形、一般三角形或非三角形(不能构成一个三角形)。其中要求输入变量&#x…...
PHP-Cookie
Cookie 是什么? cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 设置Cookie 在PHP中,你可…...
提升采购管理,打造核心竞争力七步战略采购法详解P94(94页PPT)(文末有下载方式)
资料解读:《提升采购管理,打造核心竞争力 —— 七步战略采购法详解》 详细资料请看本解读文章的最后内容。 在当今竞争激烈的商业环境中,采购管理已成为企业打造核心竞争力的关键环节。这份文件围绕七步战略采购法展开,深入剖析了…...
单片机-89C51部分:13、看门狗
飞书文档https://x509p6c8to.feishu.cn/wiki/LefkwDPU7iUUWBkfKE9cGLvonSh 一、作用 程序发生死循环的时候(跑飞),能够自动复位。 启动看门狗计数器->计数器计数->指定时间内不对计数器赋值(主程序跑飞,无法喂…...
基于MyBatis的银行转账系统开发实战:从环境搭建到动态代理实现
目标: 掌握mybatis在web应用中怎么用 mybatis三大对象的作用域和生命周期 ThreadLocal原理及使用 巩固MVC架构模式 为学习MyBatis的接口代理机制做准备 实现功能: 银行账户转账 使用技术: HTML Servlet MyBatis WEB应用的名称&am…...
纹理采样+光照纹理采样
普通纹理显示 导入纹理 1.将纹理拷贝到项目中 2.配置纹理 纹理显示原理 原始纹理(边长是),如果原始图的边长不是,游戏引擎在运行时,会自动将 纹理的边长补偿为,所以补偿是有损耗的(纹理不一定是…...
408真题笔记
2024 年全国硕士研究生招生考试 计算机科学与技术学科联考 计算机学科专业基础综合 (科目代码:408) 一、单项选择题 第 01~40 小题,每小题 2 分,共 80 分。下列每小题给出的四个选项中,只有一个…...
【Shell 脚本编程】详细指南:第一章 - 基础入门与最佳实践
Shell 脚本编程完全指南:第一章 - 基础入门与最佳实践 引言:Shell 脚本在现代开发中的重要性 Shell 脚本作为 Linux/Unix 系统的核心自动化工具,在 DevOps、系统管理、数据处理等领域扮演着关键角色。本章将系统性地介绍 Shell 脚本的基础知…...
PostgreSQL数据库操作SQL
数据库操作SQL 创建 创建数据库 create database db_test;创建并指定相关参数 with owner : 所有者encoding : 编码connection limit :连接限制 create database db_test1 with owner postgresencoding utf-8connection limit 100;修改 修改数据库名称 renam…...
RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)
Multi-Query 多路召回 多路召回流程图 多路召回策略利用大语言模型(LLM)对原始查询进行拓展,生成多个与原始查询相关的问题,再将原始查询和生成的所有相关问题一同发送给检索系统进行检索。它适用于用户查询比较宽泛、模糊或者需要…...
VBA数据库解决方案第二十讲:Select From Where条件表达式
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...
Linux架构篇、第1章_02源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62
Linux_基础篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:源码编译安装Apache HTTP Server 最新稳定版本是 2.4.62 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.01 适用环境: Centos7 文档说明 本文…...
【Machine Learning Q and AI 读书笔记】- 03 小样本学习
Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第3篇,对应原…...
Webug4.0靶场通关笔记08- 第11关万能密码登录(SQL注入漏洞)
目录 第13关 万能密码登录 1.打开靶场 2.源码分析 3.渗透方法1 4.渗透方法2 第13关 万能密码登录 本文通过《webug靶场第13关 万能密码登录》来进行渗透实战。 万能密码是利用 SQL 注入漏洞,构造出能够绕过登录验证的特殊密码字符串。通常,登录验…...
terraform中statefile文件的实现原理及作用
Terraform 的 State 文件(terraform.tfstate)是其基础设施即代码(IaC)机制的核心组件,用于记录和管理云资源的实际状态。以下是其实现原理及核心作用的详细分析: 一、State 文件的实现原理 1. 数据结构与…...
7.0/Q1,GBD数据库最新文章解读
文章题目:Cardiovascular disease s mortality in Brazilian municipalities: estimates from the Global Burden of Disease study, 2000-2018 DOI:10.1016/j.lana.2025.101106 中文标题:巴西城市的心血管疾病死亡率:来自2000-20…...
linux 使用nginx部署next.js项目,并使用pm2守护进程
前言 本文基于:操作系统 CentOS Stream 8 使用工具:Xshell8、Xftp8 服务器基础环境: node - 请查看 linux安装node并全局可用pm2 - 请查看 linux安装pm2并全局可用nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&…...
0基础 | Proteus电路仿真 | 电机使用
目录 电机类型 51单片机对直流电机的控制 基于89C51主控的直流电机控制电路仿真 代码《基于Keil C51》 51单片机对步进电机的控制 控制代码《基于Keil C51》 基于89C51主控的步进电机控制电路仿真 电机类型 直流电机 步进电机 51单片机对直流电机的控制 直流电机&#…...
人工智能100问☞第14问:人工智能的三大流派(符号主义、联结主义、行为主义)有何区别?
目录 一、通俗解释 二、专业解析 三、权威参考 一、通俗解释 人工智能的三大流派,就像三位不同性格的工程师用各自的方法造机器人: 1、符号主义(逻辑派) 核心:用“教科书式规则”教机器思考。比如教计算机下棋,先写一本《国际象棋必胜法则》,机器…...
油气人工地震资料信号处理中,机器学习和AI应用
在油气人工地震资料信号处理中,机器学习和AI可以应用于多个环节,显著提升数据质量、解释效率和勘探准确性。以下是主要应用场景及对应的开源工具推荐: 1. 数据预处理 应用场景: 噪声压制(如随机噪声、多次波、面波&am…...
Python数据分析课程实验-1
1.1数据分析简介 当今世界对信息技术的依赖程度日渐加深,每天都会产生和存储海量的数据。数据的来源多种多样一自 动检测系统、传感器和科学仪器等。不知你有没有意识到,你每次从银行取钱、买东西、写博客、发微博也会产生新的数据。 什么是数据呢?数据实际上不同于…...
算法--模拟题目
算法–模拟问题 1576. 替换所有的问号 思路:遍历字符串,找到?, 然后遍历字符a 到 z 找到不等于前后字符,替换即可 class Solution { public:string modifyString(string s) {for(int i 0; i < s.size(); i){if(s[i] ?){//替换for(char a a; a < z; a){//当字符不等…...
PDF24 Tools:涵盖20+种PDF工具,简单高效PDF工具箱,支持一键编辑/转换/合并
一、软件介绍 PDF 24 Tools是一款由德国公司开发的PDF编辑工具,拥有18年的历史,并且一直免费使用,这在同类软件中非常难得。 早在许久之前,我就推荐过这款工具的免费网页版,但由于网页使用起来可能不太方便且速度较慢…...
12.多边形的三角剖分 (Triangulation) : Fisk‘s proof
目录 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多边形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入内对角线&…...
数据库基本概念:数据库的定义、特点、分类、组成、作用
一:数据库相关概念 1.1 定义 (1)数据库:存储数据的仓库 (2)数据库管理系统:模拟和管理数据库的大型软件 (3)SQL:操作关系型数据库的编程语言,定义…...
PostgreSQL 数据库下载和安装
官网: PostgreSQL: Downloads 推荐下载网站:EDB downloads postgresql 我选了 postgresql-15.12-1-windows-x64.exe 鼠标双击,开始安装: 安装路径: Installation Directory: D:\Program Files\PostgreSQL\15 Serv…...
【c++】【STL】queue详解
目录 queue的作用什么是容器适配器queue的接口构造函数emptysizefrontback queue类的实现 queue的作用 queue是stl库提供的一种容器适配器,也就是我们数据结构中学到的队列,是非常常用的数据结构,特点是遵循LILO(last in last ou…...
循环插入数据库行
文章目录 循环插入数据库行 循环插入数据库行 -- 声明变量 DECLARE i INT 201;-- 开始循环 WHILE i < 200 BEGIN-- 插入数据INSERT INTO T_AGVPOS (POS) VALUES (i);SET i i 1; END;...
QMK机械键盘固件开发指南:从源码到实践
QMK机械键盘固件开发指南:从源码到实践 前言 QMK(Quantum Mechanical Keyboard)是一款开源的键盘固件,支持众多自定义键盘的功能配置。通过QMK,您可以完全掌控键盘的每一个按键,实现复杂的宏指令、多层按…...
Unity SpriteMask(精灵遮罩)
🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎SpriteMask:精灵遮罩 💡作用就是对精灵图片产生遮罩,…...
AdaBoost算法详解:原理、实现与应用指南
AdaBoost算法详解:原理、实现与应用指南 1. 引言 在机器学习领域,AdaBoost(Adaptive Boosting) 是最早提出的集成学习(Ensemble Learning)**算法之一,由Yoav Freund和Robert Schapire于1995年…...
Flink流式计算核心:DataStream API与时间语义深度解析
本文将围绕Flink最核心的DataStream API展开,结合其独特的时间语义体系,深入解析Flink如何实现对无界流数据的精准控制,并通过真实业务场景案例演示其工程实践方法。 一、DataStream API:Flink处理无界流的“中枢神经” Flink的A…...
C# 方法的结构与执行详解
在编程世界里,方法是一块具有名称的代码,它就像是一个功能盒子,我们可以使用方法的名称从别的地方执行其中的代码,还能把数据传入方法并接收数据输出。方法是类的函数成员,主要由方法头和方法体两个部分构成。 方法头…...
《AI大模型应知应会100篇》第41篇:多轮对话设计:构建高效的交互式应用
第41篇:多轮对话设计:构建高效的交互式应用 摘要 在银行客服机器人突然准确回答出用户第7次追问的信用卡额度规则时,在医疗问诊系统记住患者既往病史的瞬间,多轮对话技术正在创造令人惊叹的交互体验。本文将以工业级案例为经&am…...