Makefile常用函数
目录
字符串替换函数:subst
模式字符串替换函数:patsubst
去空格函数 strip
查找字符串函数 findstring
过滤函数 filter
反过滤函数 filter-out
排序函数 sort
取目录函数 dir
取文件函数 notdir
取后缀函数 suffix
取前缀函数 basename
加后缀函数 addsuffix
wildcard函数
连接函数 join
循环函数 foreach
call函数
origin 函数
shell函数
字符串替换函数:subst
$(subst <from>,<to>,<text>)
功能,把<text>中的<from>字符串替换成<to>
返回值:被替换过后的字符串
模式字符串替换函数:patsubst
$(patsubst <pattern>,<replacement>,<text>)
功能:按照指定的模式替换指定文件名的后缀
参数:
Pattern:模式字符串,指出要被替换文件名的后缀
Replacement:要替换成什么
Text:存储要被替换的原始数据
返回值:被替换过后的字符串
去空格函数 strip
$(strip <string>)
功能:去掉<string>字符串开头和结尾的空字符
返回值:被去掉空格的字符串
查找字符串函数 findstring
$(findstring <find>,<in>)
功能:在字符串中<in>查找<find>字符串
返回值:找到:返回<find>,否则返回空字符串
![]()
过滤函数 filter
$(filter <pattern…>,<text>)
功能:过滤指定模式的字符串
参数:
Pattern:模式字符串,要过滤出的字符串
Text:存储要被过滤的原始数据
返回值:符合< pattern >的字符串
反过滤函数 filter-out
$(filter-out <pattern…>,<text>)
功能:去除符合模式的字符串
返回值:不符合模式的字符串
排序函数 sort
$(sort <list>)
功能:给字符串<list>中的单词排序(升序)
返回值:排序后的字符串,会去掉相同的单词
![]()
取目录函数 dir
$(dir <names…>)
功能:从文件名序列<names>中取出目录部分,目录部分是指最后一个反斜杠(/)之前的部分
返回值:返回文件名序列<names>的目录部分, 如果没有反斜杠,返回./
取文件函数 notdir
$(notdir <names…>)
功能:从文件名序列<names>中取出非目录部分,非目录部分是指最后一个反斜杠(/)之后的部分
返回值:文件名序列<names>中取出的非目录部分
取后缀函数 suffix
$(suffix <names…>)
功能:从文件序列<names>中取出各个文件名的后缀
返回值:文件名序列<names>的后缀序列,如果文件没有后缀,则返回空字串
取前缀函数 basename
$(basename <names…>)
功能:从文件序列<names>中取出各个文件名的前缀
返回值:文件名序列<names>的前缀序列
加后缀函数 addsuffix
$(addsuffix <suffix>,<names…>)
功能:把后缀<suffix>加到<names>中的每个单词后面
返回值:加过后缀的文件名序列
wildcard函数
$(wildcard PATTERN ...)
功能:获取指定目录下指定类型的文件名
参数:指定某个目录,搜索该目录下指定类型的文件
返回值:以空格分割的指定目录下的所有符合条件的文件列表
连接函数 join
$(join <list1>,<list2>)
功能:把<list2>中的单词对应地加到<list1>的单词后面;如果<list1>的单词个数要比<list2>的多,那么,<list1>中的多出来的单词将保持原样;如果<list2>的单词个数要比<list1>多,那么,<list2>多出来的单词将被复制到<list2>中
返回值:连接过后的字符串
循环函数 foreach
$(foreach <var>,<list>,<text>)
把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text>的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值。所以,<var>最好是一个变量名,<list>可以是一个表达式,而<text>中一般会使用<var>这个参数来依次枚举<list>中的单词。
call函数
$(call <expression>,<parm1>,<parm2>,<parm3>,…)
call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数
功能:在执行时,将参数parm一次赋值给临时变量“$(1)”,“$(2)”……,最后得到expression表达式的计算值
返回值:参数值parm依次替换"$(1)","$(2)"后,变量expression定义的表达式的计算值。
($(1) $(2) 有点类似于执行shell脚本中的第一个参数和第二个参数,$(0)为函数名)
origin 函数
$(origin <variable>)
并不操作变量的值,他只是告诉你你的这个变量是哪里来的
(<variable>是变量的名字,不应该是引用;所以最好不要在<variable>中使用“$”字符。)
Origin函数会以其返回值来告诉你这个变量的“出生情况”,下面,是origin函数的返回值:
undefined:如果<variable>从来没有定义过,origin函数返回这个值undefined。
default:如果<variable>是一个默认的定义,比如“CC”这个变量,
environment:如果<variable>是一个环境变量,并且当Makefile被执行时,“-e”参数没有被打开。
file:如果<variable>这个变量被定义在Makefile中。
command line:如果<variable>这个变量是被命令行定义的。
override:如果<variable>是被override指示符重新定义的。
automatic:如果<variable>是一个命令运行中的自动化变量。
shell函数
其参数为shell命令
相关文章:
Makefile常用函数
目录 字符串替换函数:subst 模式字符串替换函数:patsubst 去空格函数 strip 查找字符串函数 findstring 过滤函数 filter 反过滤函数 filter-out 排序函数 sort 取目录函数 dir 取文件函数 notdir 取后缀函数 suffix 取前缀函数 basename 加…...
mysql的一些知识整理
这里整理一些mysql相关的知识点,是自己不太熟悉的内容 varchar(n) 中 n 最大取值为多少 MySQL 规定除了 TEXT、BLOBs 这种大对象类型之外,其他所有的列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过 65535 个字节。 …...
修改密码和再次确认密码的js和element-ui的使用
<template><div><!-- plan的插槽 --><plan title"修改密码"><!-- 插槽的名字 --><span slot"header">修改密码</span><el-form:model"ruleForm2"status-icon:rules"rules2"ref"rul…...
蓝桥杯专题-真题版含答案-【垒骰子_动态规划】【抽签】【平方怪圈】【凑算式】
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…...
kubernetes调试利器——kubectl debug工具
通常情况下,业务容器所使用的镜像是非常精简的,而一旦业务容器出现问题,通过kubectl exec进入到容器时,我们会发现自己需要使用的工具都没有,也无法通过apt, apt-get, yum等包管理工具下载需要的工具。 想要解决这个尴…...
浅谈es5如何保证并发请求的返回顺序
最近在公司实习写的是es5,在和回调地狱经过一番拉扯之后写下这篇文章,也算是体验了一把没有promise的时代 假设我们的div有一个日历列表,但是由于大小关系只能每次显示2天的信息,项目限制只能使用es5,不能使用es6的pro…...
深入浅出Pytorch函数——torch.squeeze
分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.squeeze 深入浅出Pytorch函数——torch.unsqueeze 将输入张量形状为1的维度去除并返回。比如输入向量的形状为 A 1 B 1 C 1 D A\times1\times B\times1\times C…...
【LeetCode】121.买卖股票的最佳时机
题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大…...
【力扣】74. 搜索二维矩阵 <二分法>
【力扣】74. 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则&am…...
Spring Task+Cron表达式
不需要导入坐标spring-context(包含在了spring-boot-starter) 在启动类添加EnableScheduleing开启任务调度 单独建个定时任务包task,创建定时任务类MyTask 在定时任务类添加Component 在类的方法上添加Scheduled(cron “cron表达…...
你们公司的【前端项目】是如何做测试的?字节10年测试经验的我这样做的...
前端项目也叫web端项目(通俗讲就是网页上的功能)是我们能够在屏幕上看到并产生交互的体验。 前端项目如何做测试? 要讲清楚这个问题,先需要你对测试流程现有一个全局的了解,先上一张测试流程图: 测试流程…...
华为战略方法论:BLM模型之关键任务与依赖关系
内容简介 在 BLM 模型中,执行部分包括四个模块,分别是: 关键任务与依赖关系;组织与绩效;人才;氛围与文化。 详细内容,大家可以参看下面这张图。 这四个模块其实是可以进一步划分成两个关键点…...
django的ORM模板的fake更新
django存量数据表的migraions记录丢失,若要更新表结构,则需用到fake,否则报错: 解决步骤如下: 1)同步存量表结构,生成伪表 --fake sudo python3 manage.py makemigrations appname sudo pyt…...
239.滑动窗口最大值
leetcode原题链接 题目描述: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例1: 输入:nums [1,…...
Redis基础原理
1 概念 1.1 关系型数据库与非关系型数据库对比 关系型数据库Mysql、Oralce特点数据之间有关联;数据存储在硬盘上效率操作关系型数据库非常耗时 非关系型数据库redis、hbase存储key:value特点数据之间没有关联关系;数据存储在内存中缓存思想从缓存中获…...
.NET 5 Web API 中JWT详细教程:保护你的Web应用
第一部分: 理解JWT JSON Web Token(JWT)是一种在不同系统之间传递信息的安全方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部包…...
MyBatis-Plus自动填充
文章目录 一、前言二、MyBatis-Plus自动填充功能实现2.1、实体类上增加注解2.2、自定义填充类编写 一、前言 我们在建表的时候,所有的表都会有create_id(创建人id)、create_time(创建时间)、update_id(更新…...
Dubbo服务提供者失效踢出原理解析
Dubbo服务提供者失效踢出原理解析 在分布式系统中,服务提供者的失效是一个常见而且重要的问题。Dubbo作为一款优秀的分布式服务框架,提供了失效踢出机制来及时剔除不可用的服务提供者,确保系统的稳定性和可用性。本文将深入探讨Dubbo服务提供…...
el-select下拉框处理分页数据,触底加载更多
1、声明自定义指令: directives: {loadmore: {inserted(el, binding) {const SELECTWRAP_DOM el.querySelector(.el-select-dropdown .el-select-dropdown__wrap);SELECTWRAP_DOM.addEventListener(scroll, function() {const condition this.scrollHeight - thi…...
如何设计自动化测试脚本?一文5个步骤带你从0到1设计
企业中如何设计自动化测试脚本呢?今天我们就来为大家分享一些干货。 一、线性设计 线性脚本设计方式是以脚本的方式体现测试用例,是一种非结构化的编码方式,多数采用录制回放的方式,测试工程师通过录制回访的访问对被测系统进行自…...
保姆级避坑指南:在Ubuntu 22.04上为ROS2 Humble编译OpenCV 4.2.0和cv_bridge
深度解析:Ubuntu 22.04下ROS2 Humble与OpenCV 4.2.0的精准版本匹配实战 当视觉SLAM遇上ROS2生态,版本依赖就像一场精密的外科手术。本文将带你穿透ORB-SLAM3等视觉算法与ROS2 Humble环境整合时的核心痛点——特别是OpenCV 4.2.0与cv_bridge的版本锁定机…...
数据库存储有什么作用
数据库存储就是把数据安全、规范、高效地存起来,方便以后用,核心作用可以分成这几块:1. 持久化保存程序关掉、电脑重启,数据不会丢失不像内存一断电就清空,数据库存在硬盘里长期保存2. 统一管理数据把零散的文件、记录…...
MSSQL03:SQLServer数据库中的高级语法及其技巧
目录 一、日期相关 1.查询当前日期相关数据 2.查询特定时间区间 3.时间加减法 (1)加法 (2)减法 4.格式化日期 二、数据类型转化 1.Int -> Decimal 2.DateTime->OtherTime 3.DateTime->string 三、条件判断相关…...
FinalShell v4.5.12 安装避坑指南:为什么你的远程连接总是失败?
FinalShell 4.5.12 高效配置手册:从安装到稳定连接的进阶实践 远程终端工具的选择往往决定了运维效率的天花板。作为一款集SSH连接、文件传输、性能监控于一体的全能型工具,FinalShell近年来在开发者社区中积累了不错的口碑。但不少用户在初次接触时&…...
像素语言·跨维传送门应用场景:高校外语教学AI助教落地实践
像素语言跨维传送门应用场景:高校外语教学AI助教落地实践 1. 引言:当像素冒险遇上语言学习 在高校外语教学领域,传统翻译工具往往显得过于机械和枯燥。学生们面对冰冷的界面和生硬的翻译结果,学习热情很容易被消磨。而像素语言跨…...
SlimSAS连接器在高密度存储系统中的关键应用与优化策略
1. SlimSAS连接器为何成为高密度存储的"黄金搭档"? 第一次接触SlimSAS连接器是在去年部署全闪存阵列时。当时机柜里密密麻麻的线缆让我头疼不已,直到工程师拿出这个火柴盒大小的连接器,我才意识到高密度布线的革命真的来了。SlimS…...
终极窗口置顶指南:如何让重要窗口永远不被遮挡
终极窗口置顶指南:如何让重要窗口永远不被遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop AlwaysOnTop 是一个轻量级的 Windows 应用程序,它能够将任…...
PyTorch 2.8镜像真实效果:量子计算电路→量子态演化视频模拟
PyTorch 2.8镜像真实效果:量子计算电路→量子态演化视频模拟 1. 量子计算模拟效果展示 量子计算作为前沿计算领域,其可视化一直是教学和研究的难点。我们使用PyTorch 2.8镜像实现了从量子电路到量子态演化的完整视频模拟流程,以下是关键效果…...
跨平台启动盘制作利器:WinDiskWriter技术解析与应用指南
跨平台启动盘制作利器:WinDiskWriter技术解析与应用指南 【免费下载链接】windiskwriter 🖥 Windows Bootable USB creator for macOS. 🛠 Patches Windows 11 to bypass TPM and Secure Boot requirements. 👾 UEFI & Legacy…...
图片转PDF超简单!4个实用方法轻松搞定,新手一看就会的教程
在数字化办公场景中,图片转PDF几乎是必备的基础技能。无论是整理会议照片、整理证件扫描件,还是压缩文件传输,将多张图片合并为PDF都能大幅提升效率。本文为你介绍4种免费无损的图片转PDF方法,涵盖不同使用场景和操作需求…...





















