Makefile中的wildcard和patsubst

简介: makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束。    例如,在 GNU Make 里有一个叫 'wildcard' 的函数,它有一个参数,功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。
makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束。
   例如,在 GNU Make 里有一个叫 'wildcard' 的函数,它有一个参数,功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。
   你可以像下面所示使用这个命令: 
   
SOURCES = $(wildcard *.c) 
   
这行会产生一个所有以 '.c' 结尾的文件的列表,然后存入变量 SOURCES 里。当然你不需要一定要把结果存入一个变量。 
另一个有用的函数是 patsubst ( patten substitude, 匹配替换的缩写)函数。它需要3个参数——第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的字列。例如,处理那个经过上面定义后的变量, 
   
OBJS = $(patsubst %.c,%.o,$(SOURCES)) 
   
这行将处理所有在 SOURCES 字列中的字(一列文件名),如果它的结尾是 '.c' ,就用 '.o' 把 '.c'取代。注意这里的 % 符号将匹配一个或多个字符,而它每次所匹配的字串叫做一个‘柄’(stem) 。 在第二个参数里,
%被解读成用第一参数所匹配的那个柄。


例子:

include /usr/local/AFEPack/Make.global_options
 
source = $(wildcard *.cpp)
object = $(patsubst %.cpp, %.o, $(source))
LDFLAGS += -L/usr/local/AFEPack/library/lib -lAFEPack
 
all : main
 
%.o : %.cpp
     $(CXX) -c -o $@ $< $(CXXFLAGS)
 
main : $(object)
     $(CXX) -o $@ $(object) $(LDFLAGS) $(LIBS)
 
clean :
     -rm -rf $(object)
     -rm -rf main
     -rm -f *.[nes]
     -rm -f *.dx
 
   .PHONY : default clean
目录
相关文章
|
存储 安全 数据安全/隐私保护
中外AIGC大模型的差距、态势与结构
【1月更文挑战第21天】中外AIGC大模型的差距、态势与结构
535 2
中外AIGC大模型的差距、态势与结构
|
云安全 安全 网络安全
云安全合规:构建可信云环境的基石
自动化与智能化:随着人工智能、大数据等技术的不断发展,云安全合规将越来越趋向于自动化和智能化。通过引入自动化工具和智能算法,企业可以实现对云环境中安全风险的实时监测、预警和处置,提高合规效率和准确性。 综合化治理:未来的云安全合规将更加注重综合化治理。企业需要构建全方位、多层次的安全防护体系,将合规要求融入到业务规划、架构设计、系统开发、运维管理等各个环节中,实现全生命周期的安全合规管理。 标准化与规范化:随着云安全合规的不断发展,相关标准和规范将逐渐完善并趋于统一。这将有助于降低企业在实施云安全合规过程中的成本和难度,提高合规效率和质量。 国际合作与交流:面对全球化发展的挑战和机遇,各国政府
485 6
|
人工智能
西门子S7-300的硬件结构,各模块按照什么顺序来组态?
今天我们来介绍一下西门子S7-300的硬件结构,并和大家讲一下S7-300各模块是按照什么顺序来组态的。
西门子S7-300的硬件结构,各模块按照什么顺序来组态?
|
存储 SQL 关系型数据库
【BUG记录】Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xA6' for column 'name' at row 1
在MySQL中遇到`Incorrect string value`错误通常是因为尝试插入的字符串包含不被数据库字符集支持的字符,如表情符号。错误根源是MySQL默认的utf8不支持4字节的UTF-8字符(如Emoji)。
1569 1
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数详解(概念+练习+实战)
MySQL窗口函数详解(概念+练习+实战)
2537 1
|
存储 安全 Linux
如何在 Linux 上加密文件?
如何在 Linux 上加密文件?
428 1
|
消息中间件 监控 负载均衡
快手基于RocketMQ的在线消息系统建设实践
快手需要建设一个主要面向在线业务的消息系统作为 Kafka 的补充,低延迟、高并发、高可用、高可靠的分布式消息中间件 RocketMQ 正是我们所需的。
5621 93
快手基于RocketMQ的在线消息系统建设实践
|
Java 程序员 Maven
Spring Cloud源码分析之Eureka篇第三章:EnableDiscoveryClient与EnableEurekaClient的区别(Edgware版本)
在基于SpringCloud做开发的时候,EnableDiscoveryClient和EnableEurekaClient这两个注解我们并不陌生,今天就来聊聊它们的区别,和网上更早期的类似文章不同的是:本文会聊到Dalston之后的版本中,这两个注解的区别
378 0
Spring Cloud源码分析之Eureka篇第三章:EnableDiscoveryClient与EnableEurekaClient的区别(Edgware版本)
|
存储 数据采集 开发框架
数智洞察丨聆听数据思维“双声道”:数据战略与数据能力解析
编者按: 大数据应在社会中扮演什么样的角色?有人说数据是一种资源,大数据是新时代的“石油”;也有人认为数据是类似于土地的资产,其更多的价值来自所带来业务的指数级增长。而互联网之父蒂姆·伯纳斯·李提出的观点是“数据是一种公共基础设施”,强调数据作为基础将支撑起一个城市的创新体系。本期内容我们将从数据战略与数据能力入手,深度剖析数据思维首要解决的两大问题。 本文约3532字,建议阅读时间9分钟。
465 0
|
API 信息无障碍 C++
VS Code 技术揭秘系列 — IPC 通信
前言我们知道 VS Code 基于 Electron,在 Electron 中,主进程和渲染进程之间是通过 IPC 进行进程之间的通信的,当然 VS Code 中还有其他一些进程(比如:Shared Process/Extension Host Process/File Watcher Process/Terminal Host Process/Terminal Process/Search Pr
853 0