build2设置自定义输出目录报错求助:out_base后缀与src_root不匹配
out_base suffix does not match src_root错误 我来帮你分析这个问题并给出解决方法——作为build2新手,这个错误其实是因为对它的输出目录匹配规则不熟悉导致的。
错误原因解析
当你运行b demo/@demo-out/时,build2会把demo/当作源根目录(src_root),但你的项目实际的源根是根目录.(也就是demo/的父目录)。而你指定的@demo-out/会让build2试图创建out/demo-out/作为输出根目录(out_base),这就出现了「输出根目录后缀和源根不匹配」的冲突,所以抛出了那个错误。
简单来说:你不能给子目录单独指定一个和根目录结构不对应的输出后缀,build2要求输出根目录的结构要和源根目录保持一致。
解决方案
根据你的需求,分两种情况处理:
1. 想把整个项目的构建产物放到demo-out目录
直接在项目根目录运行这条命令即可:
b @demo-out/
这样所有构建产物(包括demo的二进制文件、元数据)都会生成在./out/demo-out/目录下,完美匹配源根.的结构,不会再报错。
2. 只想单独构建demo子项目并指定它的输出目录
如果只需要处理demo子项目的输出路径,可以修改demo/buildfile,给目标添加out属性:
exe{demo}: {hxx cxx}{*} # 指定输出到上级目录的out/demo-out/ exe{demo}: out = ../out/demo-out/
然后运行b demo/,demo的二进制文件就会输出到../out/demo-out/目录中。
或者你也可以通过命令行临时指定配置变量,不用修改buildfile:
b config.out=demo-out demo/
这样demo的构建产物也会生成在./out/demo-out/目录下。
额外提示
build2默认的输出目录是./out/,使用@suffix会在out/下创建一个子目录作为输出根。记住:输出根目录的结构必须和当前构建的源根目录对应,不要给子目录单独指定跨层级的输出后缀,这就是你这次踩坑的核心原因。
内容的提问来源于stack exchange,提问作者Symlink

