makefile中的notdir,wildcard和patsubst 以及万能makefile

Makefile进阶使用 Makefile进阶使用 Makefile有一本手册,按道理来说我应该看手册学习,但是我懒,而且我觉得有那个时间学那么多肯定会忘记的东西还不如玩点游戏来得实在 以这一个Makefile为例,以后我写的Makefile都以这个为模板 #!Makefile C_SOURCES = $(shell find . -name "*.c") C_OBJECTS = $(patsubst %.c, %.o, $(C_SOURCES)) S_SOURCES = $(shell find . -name "*.s") S 阅读详情

notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~

1、makefile里的函数

makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样

return = $(functionname arg1,arg2,arg3…)。

可能这里的’$’更像是从某个地址取值类似的操作。

2、 wildcard

使用:SRC = $(wildcard *.cpp )

搜索当前目录下所有以.cpp结尾的文件,然后存入变量 SRC 里。

3、notdir

使用:SRC = $(notdir wildcard)

去除所有的目录信息,SRC里的文件名列表将只有文件名。

4、patsubst

使用:OBJ = $(patsubst%.c,%.o,$(SRC)) 

patsubst是patten substitude的缩写,匹配替代的意思。它需要3个参数——第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的字列。

这行将处理所有在 SRC字列中的字(一列文件名),如果它的结尾是 ‘.c’ ,就用 ‘.o’ 把 ‘.c’取代。注意这里的 % 符号将匹配一个或多个字符,而它每次所匹配的字串叫做一个‘柄’(stem) 。 在第二个参数里,
%被解读成用第一参数所匹配的那个柄。

举个栗子:

#obj dir
SRC := $(wildcard *.cpp $(TINYXMLDIR)/*.cpp $(PUBDIR)/*.cpp $(COMMDIR)/*.cpp)
OBJ := $(patsubst %.cpp, $(OUTDIR)/%.o, $(notdir ${SRC}))

传说中的万能makefile

########################################################### 
# Generic makefile  
#  
# by George Foot  
# email: george.foot@merton.ox.ac.uk  
#  
# Copyright (c) 1997 George Foot  
# All rights reserved.  
# 保留所有版权 
#  
# No warranty, no liability;  
# you use this at your own risk.  
# 沒保险,不负责  
# 你要用这个,你自己担风险  
#  
# You are free to modify and  
# distribute this without giving  
# credit to the original author.  
# 你可以随便更改和发送这个文件  
# 而不需要給原作者什么荣誉。  
# (你好意思?)  
#  
###################################### 

### Customising 
# 
# Adjust the following if necessary; EXECUTABLE is the target 
# executable's filename, and LIBS is a list of libraries to link in 
# (e.g. alleg, stdcx, iostr, etc). You can override these on make's 
# command line of course, if you prefer to do it that way. 
#  
# 如果需要,调整下面的东西。 EXECUTABLE 是目标的可执行文件名, LIBS 
# 是一个需要连接的程序包列表(例如 alleg, stdcx, iostr 等等)。当然你 
# 可以在 make 的命令行覆盖它们,你愿意就沒问题。 
#  

EXECUTABLE := mushroom.exe 
LIBS := alleg 

# Now alter any implicit rules' variables if you like, e.g.: 
# 
# 现在來改变任何你想改动的隐含规则中的变量,例如 

CFLAGS := -g -Wall -O3 -m486 
CXXFLAGS := $(CFLAGS) 

# The next bit checks to see whether rm is in your djgpp bin 
# directory; if not it uses del instead, but this can cause (harmless) 
# `File not found' error messages. If you are not using DOS at all, 
# set the variable to something which will unquestioningly remove 
# files. 
# 
# 下面先检查你的 djgpp 命令目录下有沒有 rm 命令,如果沒有,我们使用 
# del 命令來代替,但有可能给我们 'File not found' 这个错误信息,这沒什么大碍 。如果你不是用 DOS ,把它设定成一个删除文件而不废话的命令。 
# (其实这一步在 UNIX 类的系统上是多余的,只是方便 DOS 用户。 UNIX 
# 用户可以删除这5行命令。) 

ifneq ($(wildcard $(DJDIR)/bin/rm.exe),) 
RM-F := rm -f 
else 
RM-F := del 
endif 

# You shouldn't need to change anything below this point. 
# 
#  从这里开始, 你应该不需要改动任何东西。(我是不太相信,太 NB 了!) 

SOURCE := $(wildcard *.c) $(wildcard *.cc) 
OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE))) 
DEPS := $(patsubst %.o,%.d,$(OBJS)) 
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS)) 
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \ 
$(patsubst %.d,%.cc,$(MISSING_DEPS))) 
CPPFLAGS += -MD 

.PHONY : everything deps objs clean veryclean rebuild 

everything : $(EXECUTABLE) 

deps : $(DEPS) 

objs : $(OBJS) 

clean : 
  @$(RM-F) *.o 
  @$(RM-F) *.d 

veryclean: clean 
  @$(RM-F) $(EXECUTABLE) 

rebuild: veryclean everything 

ifneq ($(MISSING_DEPS),) 
$(MISSING_DEPS) : 
  @$(RM-F) $(patsubst %.d,%.o,$@) 
endif 

-include $(DEPS) 

$(EXECUTABLE) : $(OBJS) 
  gcc -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS)) 
###
【FDTD运行引擎错误解决方法】 我用的是2024R1版的FDTD,第一次安装好的时候点“RUN”可以正常运行,后来不知道什么问题就无法运行了。我从网上找相关的解决办法,并未找到,将软件卸载重装,重启等方法都没有解决,后来在官网按照提示解决了,我把官网提供的方式和我的情况相结合,提供一个解决方式。提示:以下是本篇文章正文内容,下面案例可供参考最后说一下两个MPI和Local computer(不使用MPI)的区别使用MPI进行仿真可以显著提高计算速度和效率,特别是对于大规模和复杂的仿真任务,但需要额外的设置和配置。(多线程并行计算) 阅读详情

相关推荐

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1811

Makefile中的wildcard用法

一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。复杂一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。因此在一个目录下可以使用如下内容的Makefile来将

dongyanxia1000的专栏 1076

通达信主力检测利器

主力轨迹:100*EMA(EMA(MTM,N1),N1)/EMA(EMA(ABS(MTM),N1),N1),COLORWHITE;主力拉高:IF(VAR51<REF(VAR51,1),VAR51,0),COLORYELLOW,NODRAW;洗盘:IF(VAR5<REF(VAR5,1),VAR5,0),COLOR000079,NODRAW;主力进场:IF(VAR5>REF(VAR5,1),VAR5,0),COLORRED,NODRAW;MAZL:MA(主力轨迹,N2),COLORYELLOW;

zhibiaogong的博客 7456

详解makefile中的$(wildcard pattern)

在 Makefile 中,$(wildcard pattern) 是一个函数,用于匹配指定模式的文件,并返回符合条件的文件列表。这个示例中,$(wildcard src/.c include/.h) 将匹配 src 目录下的所有 .c 文件和 include 目录下的所有 .h 文件,并将结果合并为一个文件列表赋值给变量 FILES。在这个例子中,$(wildcard *.c) 将匹配当前目录下所有以 .c 结尾的文件,并将符合条件的文件名列表赋值给变量 SRCS。

最后一个bug的博客 4223

3DMax马克杯制作教程

01 在前视图创建一个【圆柱体】,设置参数,长度为32,高度为82;高度分段12、边数为16;如图所示。 02 点击鼠标右键,把圆柱体转换为可编辑多边形,如图所示。 03 在修改面板中,选择【多边形】层级,在视图中选择所示的面,使用缩放工具稍微缩小一点,如图所示。 04 点击【插入设置】,如图所示。 设置插入数量为2.5mm。 05 点击【挤出设置】,如图所示。 ...

youximoxingEDO的博客 3478

No Target Connected 错误时的一种情况

STM32的SWD烧录模式No Target Connected 错误的一种情况 STM32的SWD烧录模式No Target Connected 错误时的一种处理情况 这是我第一次烧板子的时候遇到的问题,在给板子download的时候出现了“No Target Connected”的错误,这里讲一种解决方法。不一定适用于全部状况,但是可以作为一种纠错方法。 打开 Options for Target… 1.首先点击Options for Target…这个像魔棒一样的按键打开,会出现这个页面 2.点击

Logan_CodeGou的博客 1万+

wildcard函数详解

是GNU Make中的一个函数,它用于在Makefile中匹配指定模式的文件名,并返回所有匹配到的文件列表。这个函数在处理一组文件时非常有用,尤其是需要自动包含某个目录下所有特定类型的文件时。函数会搜索当前工作目录(通常是包含Makefile的目录)中所有与给定模式匹配的文件,并返回一个空格分隔的文件列表。函数只会在Makefile被解析时执行一次,因此如果后来创建了新的匹配文件,Makefile不会自动包含它们。是一个或多个文件名模式,可以是相对路径或绝对路径,可以使用通配符,如。(匹配任意字符序列),

weixin_41902493的博客 1736

【思考模型框架】前景理论(Prospect Theory),认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值

前景理论,是一种行为经济学理论。前景理论,描述了人们在不确定条件下如何作出决策。前景理论,认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值。

奶爸的编程之路,也就一周冷个三天 1642

Makefile中wildcard使用方法

Makefile中wildcard函数使用方法 Makefile用于管理工程编译,作为一种管理工具,内部包含相关处理函数,其中wildcard就是makefile文件中的一个函数。 一、wildcard作用 显示指定路径下指定文件类型的所有文件。 二、格式 $(wildcard 指定文件类型) 三、实例 图1 源文件结构 图2 wildcard实例 ...

小白蒋-材料转行芯片验证 5792

Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集

本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。

2201_76125261的博客 601

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1388

makefile中的notdir,wildcard和patsubst(附加万能makefile)

转自:http://www.cnblogs.com/pied/archive/2012/11/02/2751476.html1、makefile里的函数makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样return = $(functionname arg1,arg2,arg3...)。可能这里的’$’更像是从

未来之歌 1873

【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云

本文聚焦爬虫技术在金融科技监管中的应用。开篇阐述金融科技发展带来监管挑战,引出爬虫技术的重要性。接着介绍金融科技监管政策与合规要求,包括政策法规体系、合规细则及政策变化应对。随后探讨爬虫技术选型、数据监测策略、风险指标抓取及案例实操。还阐述基于爬虫数据构建风险预警与防控机制,含模型构建、阈值设定等。最后总结爬虫技术应用成果,展望其与人工智能融合、适应新监管需求及重视数据安全的未来发展趋势。

邓邓子的博客 1063

makefile学习3-wildcard和patsubst

notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1、makefile里的函数 makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname  arg1,arg2,arg

wys的专栏 761

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

makefile中的notdir,wildcard和patsubst

notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1、makefile里的函数 makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname arg1,arg2,arg3...)。 可能这里的'$'更像是从某个地址取值类似的操作。 2、 wildcard 使用:SRC...

u014426028的博客 265

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

makefile中的notdir,wildcard和patsubst notdir,wildcard和patsubst是makefile中几个有用的函数

notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~ 1、makefile里的函数 makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname  arg1,arg2,arg

yun_0_yun_的专栏 429

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

makefile 常用函数notdir、wildcard、patsubst

notdir,wildcard和patsubst是makefile中几个有用的函数,以前没留意过makefile中函数的用法,今天稍微看看~   1、makefile里的函数 makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样 return = $(functionname  arg1,

好记性不如赖笔头 1381

Makefile中的wildcard用法及一个万能makefile

在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展

hktkfly6的专栏 8924

万能makefile模板以及相关命令介绍

1、makefile $@, $^, $<, $? $@ 表示目标文件 $^ 表示所有的依赖文件 $< 表示第一个依赖文件 $? 表示比目标还要新的依赖文件列表 如一个目录下有如下文件: $ ls hello.c hi.c main.c Makefile 按照 Makefile 规则规规矩矩的写: main: main.o hello.o hi.o gcc -o main main.o hello.o hi.o main.o: main.c cc

lhh_qrsly的博客 480

多目录下的Makefile

1、测试文件夹目录: ├── bin │ └── main ├── include │ ├── test1.h │ ├── test2.h │ └── test.h ├── Makefile ├── obj └── src ├── main.c ├── tes...

198

Makefile核心教程(十) --- 一文吃透 Makefile 函数

Makefile核心教程(十) --- 一文吃透 Makefile 函数

萧邯嵌入式笔记 431
上一篇: VIM操作--跳到最后一行和跳到最后一行的最后一个字符
下一篇: error MSB6006: "CL.exe"已退出,代码为-1073741515
MagicScaring
博客等级 码龄11年 18粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值