Makefile中wildcard函数的应用理解

article/2025/9/16 22:15:39

文章目录

前言

1 "*"通配符使用场景

2 "*"通配符实例

总结


前言

如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符。make 支持三种通配符:"*","?" 和 "[...]"。这和 UnixB-Shell 是相同的。本篇主要讲述 "*" 通配符在变量中使用失效时,使用 wildcard 函数使能 "*" 通配符的通配功能。


1 "*"通配符使用场景

(1) 在命令中使用"*";

clean:rm -f *.o

这是操作系统 Shell 所支持的通配符,删除当前目录下的所有以 .o 结尾的文件。

这是在命令中的有效通配符,通配所有 .o 文件的集合。
(2) 在规则中使用"*";

print: *.clpr -p $?touch print

上面这个例子说明通配符 "*" 也可以在我们的规则中使用,目标 print 依赖于所有的 .c 文件。

(3) 在变量中使用"*";

objects = *.o

上面这个例子,表示了通配符 "*" 同样可以在变量中使用。

但是 *.o 在变量中不会展开,objects 的值就是 *.oMakefile 中的变量其实就是 C/C++ 中的宏。如果希望通配符 "*" 在变量中展开,也就是让 objects 的值是所有 .o 的文件名的集合,那么需要 wildcard 函数的配合。

objects := $(wildcard *.o)

这样,objects 的值就是所有 .o 的文件名的集合。

2 "*"通配符实例

这里我创建了 source_dir 目录和三个子目录: gpio、irq、usart。三个子目录中都有对应的 .c 文件。

$(foreach source, $(SOURCE_DIR), $(wildcard $(source)/*.c))

上面的例子中,$(SOURCE_DIR) 中的单词会被挨个取出,并存到变量 source 中,(wildcard $(source)/*.c) 每次根据 $(source)/*.c 计算出一个值(因为使用了 wildcard,所以匹配单词目录下 .c 文件集合),这些值以空格分隔,最后作为 foreach 函数的返回值。

对于 foreach 函数不理解的同学,可以参考:

Makefile中foreach函数的应用理解

本例程的最终目的,是将各子目录下的 .c 文件(可编译文件)列举出来。


总结

通配符 "*" 只有在命令规则中使用它才会展开,如果在定义变量和函数中使用时,通配符 "*" 不会自动展开,这个时候就需要函数 wildcard 的配合使用。


http://chatgpt.dhexx.cn/article/WPSUHnDU.shtml

相关文章

DNS Wildcard(DNS泛域名)

在DNS中,泛域名(wildcard Resource Record)可以被认为是一种合成RR的机制,借助于它,DNS服务器可以响应本来不存在的域名的请求,它的设计初衷是用来把所有邮件都转发到一个邮件系统(当然&#xf…

Es 模糊查询 match,wildcard

Es 模糊查询的方式 要求: Es查询: 查询工单信息, 输入 “测试”,查出 form_name 为字段中有查询出含有符合内容的数据 match:分词模糊查询: 比如“Everything will be OK, All is well”,会被…

wildcard

[ruskyrhel7 test]$ lstest1 test123 test2 test317 test33 test335 test336 test44 testtest[ruskyrhel7 test]$ ls test?3test33[ruskyrhel7 test]$ ls test??3test123[ruskyrhel7 test]$ ls test*test1 test123 test2 test317 test33 test335 test336 tes…

Makefile中wildcard使用方法

Makefile中wildcard函数使用方法 在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN…) 。…

通配符(WildCard)的使用

一、关于WildCard:一个web应用,有成千上万个action声明,可以利用struts2提供的映射机制把多个彼此相似的映射关系简化成一个映射关系,即通配符。 1.新建类 ActionWildCard,验证通配符的方法 2.1添加Student需要实践的两…

Elasticsearch 警惕使用 wildcard 检索!然后呢?

1、wildcard 检索定义 wildcard 检索可以定义为:支持通配符的模糊检索。 类似 Mysql 中的 like 模糊匹配,如下所示: Elasticsearch 中的 wildcard 使用方式如下: 通配符运算符是匹配一个或多个字符的占位符。 通配符支持两种&…

VIO你用对了吗

VIO(Virtual Input/Output)有两个主要功能 监测设计中的内部信号; 驱动设计中的内部信号。 既然是Virtual(虚拟的),就表明这个输入或输出并不是真实存在于FPGA设计中。下图显示了VIO的输入、输出管脚。其…

VIO(notes) —— (3)VIO残差构建与IMU预积分

VIO残差构建与IMU预积分 一、VIO残差函数的构建1. 系统所需的状态变量2. 视觉重投影误差2.1 视觉重投影误差2.2 逆深度参数化2.3 VIO 中基于逆深度的重投影误差 3. 预积分模型由来及意义3.1 为什么需要预积分?3.2 怎么预积分?3.3 预积分是什么&#xff1…

深蓝学院VIO课程学习笔记 VIO概述

VIO概述 1. VIO整体概述 松耦合:各部分自己算自己的,最后单独把数据来算 紧耦合:同时考虑这两个问题(效果更好) IMUGPS精度可以达到cm级,但是受环境影响比较大 融合方案 采用卡尔曼滤波,当一边…

海思3559 sample解析:vio

前言 拿到开发板,编完了平台sample,自然按捺不住要去简单学习测试了。打开最直观相对也比较简单的vio例程做个到手分析和流程梳理吧 测试 一开始自然是最磕磕绊绊的,连上HDMI线,串口登录后运行,屏幕乌漆嘛黑&#xff…

从零手写VIO(7)

从零手写VIO(7) 文章目录 从零手写VIO(7)前言一、VINS-Course代码解析二、作业(7)1.simulation-test.cpp修改2.Sysytem.cpp修改3.config文件夹下euroc_config.yaml参数修改4.param.h修改4.1无噪声4.2小噪声4.3大噪声 总结 前言 一、VINS-Course代码解析…

运行msckf_vio

1、编译 cd ~/msckf catkin_make --pkg msckf_vio --cmake-args -DCMAKE_BUILD_TYPERelease2、运行(运行euroc数据集) 首先roscore开启ros节点 cd ~/msckf source ~/msckf/devel/setup.bash roslaunch msckf_vio msckf_vio_euroc.launchcd ~/msckf sou…

深蓝学院-手写VIO作业-第二章

文章目录 一、基础作业,必做环境配置说明a. ROS环境搭建b. Matlab安装 1、设置IMU 仿真代码中的不同的参数,生成Allen 方差标定曲线。a. 对于非ROS:生成运动imu数据b.对于ROS: 专门生成静止 imu 数据,用于 allan 方差标定 2、将IM…

【代码阅读】PL-VIO

〇、写在前面 PL-VIO采用的通信是ROS,所以并不能像ORBSLAM那样按照执行顺序来理顺,因为ORBSLAM是有一个真正意义上的主函数的,经过CMakeList的编辑产生的可执行文件会有一个开始,但是PL-VIO用的是ROS,其内部通信是节点…

VIO:飞行机器人单目VIO算法测评

转:https://blog.csdn.net/u012348774/article/details/81414264 泡泡图灵智库,带你精读机器人顶级会议文章 标题:A Benchmark Comparison of Monocular Visual-Inertial Odometry Algorithms for Flying Robots 作者:Jeffrey De…

VIO学习笔记一

1. IMU(Inertial Measurement Unit,惯性测量单元) 典型6轴IMU以较高频率(≥100Hz)返回被测量物体的角速度与加速度。受自身温度、零偏、振动等因素干扰,积分得到的平移和旋转容易漂移。IMU本身由一个陀螺仪…

VIO仿真

使用turtelbot3仿真,发现gazebo的imu没有重力加速度。放弃。还是使用公开数据集。 使用这个仿真​​​​​​vio_data_simulation/src at ros_version HeYijia/vio_data_simulation GitHub 看一下如何用这个仿真跑起来vio。 -- 将特征点反投回图像,…

3.4.1 VIO虚拟以太网原理

最后更新2021/08/12 VIO Server在此完全实现了一个标准的以太网交换机的功能,现在业界都有了高大上的名称:SDN(Software Defined Network),如果没有足够的网络知识(幸好只是网络链路层)&#x…

Vivado调用VIO核

文章目录 前言一、IP核的介绍二、VIO核1.作用2.调用方法 总结 前言 提示:本篇文章所使用的软件为Vivado2018.3: 以四选一数据选择器为例,使用verilog hdl语言以及Vivado自带的VIO,IP来实现功能 提示:以下是本篇文章正文内容&…

海思3519 VIO Sample例程讲解

海思VIO Sample例程讲解 海思SDK解压出来后,Sample包含各个功能模块的历程,本篇讲解VIO Sample历程。 进入VIO模块可以看到,VIO的main函数文件,先从main函数执行程序。 进入文件后首先看下VIO实现的功能,可以看到VIO…