Как заставить цвета 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
;