patsubst函数 去掉路径,patsubst怎么读?

吉云

嘿!兄弟们,今天咱们来聊聊这个神奇的函数——patsubst!

最近在捣鼓 Makefile,发现这个函数简直是神器!简直是程序员的福音啊!它能帮我自动地处理文件名、路径,简直不要太方便!

patsubst这个名字怎么读?

哎,别看它长得挺吓人,其实读起来很简单,就按照英文单词的发音来就好: pat-sub-st。

patsubst函数 去掉路径,patsubst怎么读?

patsubst到底有什么用?

它可以用来对字符串进行替换操作,这可是一个强大的功能!你可以把它想象成一个超级灵活的“查找替换”工具,可以帮你做很多事情。

比如,你想把所有 .c 文件都改成 .o 文件,patsubst就可以轻松搞定!你只需要告诉它:

$(patsubst %.c,%.o,a.c b.c c.c)

然后它就会自动把 a.c b.c c.c 变成 a.o b.o c.o,是不是很神奇?

patsubst怎么去掉路径?

这可是patsubst的绝活!它可以轻松地帮你把路径从文件名中分离出来,留下你想要的纯净文件名。

比如,你有一个文件 ./src/main.c,你想只保留 main.c,就可以这样写:

$(patsubst %/%,%,./src/main.c)

是不是很简单?

patsubst是怎么实现这个功能的呢?

其实它就是一个字符串替换函数,它会根据你提供的模式来进行匹配和替换。

% 代表一个匹配任何字符的通配符,可以匹配任何字符,包括路径分隔符 /。

/ 是路径分隔符,它用来区分文件名和路径。

所以,$(patsubst %/%,%,./src/main.c) 的意思是:

找到所有包含 / 的字符串,也就是包含路径的字符串。

把它们替换成 %,也就是去掉路径,只保留文件名。

patsubst除了去掉路径还能干啥?

当然能!它还有很多其他的用途,比如:

添加后缀名: 比如,你可以把所有 .cpp 文件都改成 .o 文件,只需要这样写:

$(patsubst %.cpp,%.o,a.cpp b.cpp c.cpp)

去除后缀名: 比如,你想把所有 .o 文件的文件名都去掉后缀名,就可以这样写:

$(patsubst %.o,%,a.o b.o c.o)

替换字符串: 比如,你想把所有 _ 都替换成 -,就可以这样写:

$(patsubst _,-,a_b_c)

是不是很强大?

使用patsubst的注意事项:

模式匹配: 确保你的模式匹配正确,否则patsubst就无法正常工作。

替换内容: 确保你想要替换成什么,否则可能会出现意想不到的结果。

patsubst的应用场景:

自动生成目标文件: 你可以用 patsubst 来生成所有源文件的目标文件,例如:

makefile

SOURCES := $(wildcard .c)

OBJECTS := $(patsubst %.c,%.o,$(SOURCES))

编译多个库: 你可以用 patsubst 来编译多个库,例如:

makefile

LIBRARIES := $(wildcard .a)

LIB_FLAGS := $(patsubst %.a,-L% $(LIBRARIES))

自动添加头文件路径: 你可以用 patsubst 来添加头文件路径,例如:

makefile

INCLUDE_DIRS := $(wildcard include/)

CFLAGS += $(patsubst %,-I%,$(INCLUDE_DIRS))

patsubst 是一个非常强大的函数,它可以帮你轻松地处理文件名、路径,并且可以用于各种场景。掌握了它,你就可以在 Makefile 中更加得心应手了!

你觉得patsubst还有什么其他用处呢?欢迎分享你的见解! 😉

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]