Как заставить цвета Clang работать в boost-bjam?

b2 release link=static toolset=clang работает, но он не показывает хорошие цвета, которые я нахожу полезными в выводе clang.

4

Решение

Отказ от ответственности: это не решение вашей проблемы, но это занимает слишком много места, чтобы поместить это в комментарий.

Вот краткий Холмсианский процесс устранения. Во-первых, согласно Clang документация, Цвет активируется только при обнаружении терминала с поддержкой цвета. А во-вторых, согласно Boost.Jam документация, все переменные окружения автоматически импортируются во встроенную .ENVIRON модуль. Наконец, у вас действительно есть терминал с поддержкой цвета. Все же это не работает. Даже форсирование проблемы с явным аргументом командной строки Clang

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

не отображается цветная диагностика. Мой единственный вывод, что как-то b2 не запускает сборку внутри терминала с цветовой кодировкой. После дальнейшего копания на основе ваших комментариев, я нашел связанная проблема в другой системе сборки:

Причина в том, что ниндзя устанавливает подпроцесс stdout / stderr в
pipe (Subprocess :: Start (), subprocess.cc) и clang проверяет,
StandardErrHasColors () (tools / clang / lib / Driver / Tools.cpp), который
false если! isatty (2) (lib / Support / Unix / Process.inc).

Я немного осмотрелся, и способ сделать это, кажется, позвонить
fork_pty () для запуска дочернего элемента в псевдо-терминале. Я не знаю, если это
повлияет на время создания подпроцесса, а при открытии ~ 4000 псевдо
ttys (сборка chrome в -j10000) считается хорошей формой.

(Можно заставить clang всегда испускать коды, экранированные цветом, используя
«-Xclang -fcolor-диагностика», но это довольно странно. сделать не
кажется, переопределить stderr в Unix, насколько я могу судить,
child_execute_job () в job.c)

Заключение: возможно, вам придется копаться в b2 внутренние, чтобы увидеть, есть ли какое-то перенаправление вывода, которое предотвращает цветовое кодирование. В качестве альтернативы, вы можете спросить на Список рассылки Boost.Build. Надеюсь, это поможет вам немного дальше.

Обновить: Eсть давний билет на сайте Boost SVN, который занимается этим.

2

Другие решения

Кажется, что основная проблема была каким-то образом решена, но есть еще несколько объяснений, которые необходимо сделать в отношении этого.

Если вы хотите цвета, вы можете использовать это в user-config.jam:

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

Тем не менее, мое личное предпочтение состоит в том, чтобы справиться с этим в моем Jamroot, используя требования проекта, чтобы другим не приходилось с этим сталкиваться:

project my_project : requirements
<toolset>clang:<cflags>-fcolor-diagnostics
<toolset>clang:<cxxflags>-fcolor-diagnostics
;
1