在Boost Build(b2/bjam)中如何替换字符串列表中的指定模式?
Boost Build 字符串列表模式替换实现方案
Boost Build 提供了和 GNU Make 替换功能对应的原生实现,具体用法如下:
1. 固定字符串替换(等效 GNU Make subst 功能 / 简易扩展名替换)
两种常用实现方式:
- 简易扩展名替换:直接使用
$(变量:原后缀=新后缀)语法,和 Make 的简易替换语法完全一致
示例:将.cpp后缀替换为.ocpp_files = foo.cpp bar.cpp main.cpp ; obj_files = $(cpp_files:.cpp=.o) ; # 执行结果:foo.o bar.o main.o - 全局固定字符串替换:使用内置
replace方法,可替换任意位置的固定字符串
示例:替换文件名中的_old标记为_newsrc_files = test_old.cpp biz_old.cpp ; new_files = $(src_files).replace("_old", "_new") ; # 执行结果:test_new.cpp biz_new.cpp
2. 通用模式替换(等效 GNU Make patsubst 功能)
Boost Build 原生提供同名patsubst函数,支持用%作为通配符匹配任意非空字符串,语法规则和 GNU Make 基本一致,调用时需要用[]包裹函数表达式:
语法格式:[ patsubst 匹配模式, 替换格式, 待处理字符串列表 ]
- 示例1:将所有
.cpp源文件映射为obj目录下的.o目标文件src_files = foo.cpp bar.cpp utils/tool.cpp ; obj_files = [ patsubst %.cpp, obj/%.o, $(src_files) ] ; # 执行结果:obj/foo.o obj/bar.o obj/utils/tool.o - 示例2:仅替换路径前缀,将
src/开头的路径改为dist/开头path_list = src/foo.c src/bar.h test/run.c ; dist_paths = [ patsubst src/%, dist/%, $(path_list) ] ; # 执行结果:dist/foo.c dist/bar.h test/run.c
内容的提问来源于stack exchange,提问作者Gabriel Devillers
相关产品推荐
相关产品推荐

