You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Boost Build(b2/bjam)中如何替换字符串列表中的指定模式?

Boost Build 字符串列表模式替换实现方案

Boost Build 提供了和 GNU Make 替换功能对应的原生实现,具体用法如下:

1. 固定字符串替换(等效 GNU Make subst 功能 / 简易扩展名替换)

两种常用实现方式:

  • 简易扩展名替换:直接使用$(变量:原后缀=新后缀)语法,和 Make 的简易替换语法完全一致
    示例:将.cpp后缀替换为.o
    cpp_files = foo.cpp bar.cpp main.cpp ;
    obj_files = $(cpp_files:.cpp=.o) ;
    # 执行结果:foo.o bar.o main.o
    
  • 全局固定字符串替换:使用内置replace方法,可替换任意位置的固定字符串
    示例:替换文件名中的_old标记为_new
    src_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:24:04