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

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

2 ответа

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

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

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

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

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

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

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

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

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

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

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

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

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

project my_project : requirements
  <toolset>clang:<cflags>-fcolor-diagnostics
  <toolset>clang:<cxxflags>-fcolor-diagnostics
;
Другие вопросы по тегам