4

b2 release link=static toolset=clang有效,但它没有显示我发现在 clang 的输出中有用的漂亮颜色。

4

2 回答 2

2

免责声明:这不是解决您问题的答案,但将其放在评论中需要太多空间。

这是一个简短的 Holmesian 消除过程。首先,根据Clang 文档,仅当检测到具有颜色功能的终端时才启用颜色。其次,根据Boost.Jam 文档,所有环境变量都会自动导入到其内置.ENVIRON模块中。最后,您确实有一个支持颜色的终端。然而它不起作用。甚至使用显式的 Clang 命令行参数来强制解决问题

./b2 install --toolset=clang --cxxflag=-fcolor-diagnostics

无法显示彩色诊断。我唯一的结论是,b2它不会以某种方式在颜色编码的终端内启动它的构建。根据您的评论进一步挖掘后,我在另一个构建系统上发现了一个相关问题

原因是 ninja 将子进程 stdout/stderr 设置为管道(Subprocess::Start()、subprocess.cc),并且 clang 检查 StandardErrHasColors() (tools/clang/lib/Driver/Tools.cpp) 是否如果 !isatty(2) (lib/Support/Unix/Process.inc) 则为假。

我环顾四周,这样做的方法似乎是调用 fork_pty() 在伪终端中运行子进程。我不知道这是否会影响子进程的创建时间,以及打开 ~4000 个伪 ttys(在 -j10000 处构建的 chrome)是否被认为是好的形式。

(可以强制clang始终使用“-Xclang -fcolor-diagnostics”发出颜色转义代码,但这很棘手。据我所知,make似乎没有覆盖unix上的stderr,child_execute_job()在工作中。 C)

结论:您可能需要深入了解b2内部结构,看看是否发生了一些输出重定向,从而阻止了颜色编码。或者,您可以在Boost.Build 邮件列表中询问。希望这可以进一步帮助您。

更新:Boost SVN 网站上有一张长期存在的票可以处理这个问题。

于 2013-05-01T12:18:53.963 回答
1

似乎核心问题以某种方式解决了,但还有一点需要解释。

如果你想要颜色,你可以使用它user-config.jam

using clang : : : <compileflags>-fcolor-diagnostics ;

但是,我个人的偏好是通过使用项目要求在我的 Jamroot 中处理这个问题,这样其他人就不需要处理它:

project my_project : requirements
  <toolset>clang:<cflags>-fcolor-diagnostics
  <toolset>clang:<cxxflags>-fcolor-diagnostics
;
于 2015-03-26T19:45:02.470 回答