b2 release link=static toolset=clang
有效,但它没有显示我在clang的输出中有用的漂亮颜色。
答案 0 :(得分:2)
免责声明:这不是解决问题的答案,但要将其置于评论中需要太多空间。
这是一个简短的Holmesian淘汰过程。首先,根据Clang documentation,仅当检测到具有颜色功能的终端时才启用颜色。其次,根据Boost.Jam documentation,所有环境变量都会自动导入其内置的.ENVIRON
模块。最后,你确实有一个支持颜色的终端。但它不起作用。甚至用明确的Clang命令行参数强制解决问题
./b2 install --toolset=clang --cxxflag=-fcolor-diagnostics
无法显示彩色诊断。我唯一的结论是,不知怎的b2
没有在彩色编码终端内启动它的构建。根据您的评论进一步挖掘后,我找到了related problem on another build system:
原因是ninja将subprocess stdout / stderr设置为a pipe(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”,但这很糟糕。制造没有 据我所知,似乎在unix上覆盖了stderr, job.c中的child_execute_job())
结论:您可能需要深入了解b2
内部,看看是否有一些阻止颜色编码的输出重定向。或者,您可以在Boost.Build mailinglist上询问。希望这会对你有所帮助。
更新:Boost SVN网站上有long standing ticket处理此问题。
答案 1 :(得分:1)
似乎核心问题已经以某种方式解决了,但还有一些解释要做。
如果您想要颜色,可以在user-config.jam
:
using clang : : : <compileflags>-fcolor-diagnostics ;
但是,我个人的偏好是通过使用项目要求在我的Jamroot中处理这个问题,以便其他人不需要处理它:
project my_project : requirements
<toolset>clang:<cflags>-fcolor-diagnostics
<toolset>clang:<cxxflags>-fcolor-diagnostics
;