簡體   English   中英

Ninja Build System + gcc/clang 沒有 output 診斷 colors

[英]Ninja Build System + gcc/clang doesn't output diagnostic colors

When invoking ninja on a C or C++ (hence both tags) project, with the clang or gcc compiler, the output is not colored with ANSI colors.

例如:

error應該是紅色的,但不是。 warning應該是黃色/橙色,但不是。

一切都是一樣的顏色,真的很難說是怎么回事!

為什么會發生這種情況

發生這種情況是因為ninja在內部創建了一個pipe() ,編譯器(在這種情況下為 gcc 或 clang)中的 stdout 和 stderr 被重新路由。 這使得檢查終端(可能支持顏色)的 gcc 和 clang 內部的檢查失敗。

對於 pipe,諸如isatty(stdout)之類的檢查不會返回true ,即使隨后將 pipe 再次轉發到 stdout。

它已記錄在案

Ninja的FAQ在GitHub.com上講過這個問題,但是這個FAQ不包含在軟件中,在--help中沒有提到,也沒有ninja manpages,常見的搜索引擎(ddg,google)好像沒有找到那個FAQ用於與顏色相關的常見搜索查詢。

因此,這篇文章,因為 SO 具有良好的 SSO。

修復

-fdiagnostics-color=always添加到您的 C 或 CXX 標志中。 例如,使用 cmake,您可以使用 append -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always (或 C 的CMAKE_C_FLAGS )。

這適用於 gcc(如其手冊頁中所述)和 clang(clang 的手冊頁未提及此選項,但它包含在llvm.org 上的命令行參考中

作為永久修復,您可以.zshrc將以下內容添加到您的 .zshrc 、 .bashrc或類似文件中:

# force C colored diagnostic output
export CFLAGS="${CFLAGS} -fdiagnostics-color=always"
# force C++ colored diagnostic output
export CXXFLAGS="${CXXFLAGS} -fdiagnostics-color=always"
export CCFLAGS="${CCFLAGS} -fdiagnostics-color=always"
# force C, C++, Cpp (pre-processor) colored diagnostic output
export CPPFLAGS="${CPPFLAGS} -fdiagnostics-color=always"

僅當您知道您永遠不需要 pipe 編譯器的 output 時,您才應該這樣做。 此外,這僅適用於 clang 和 gcc 以及其他支持此功能的編譯器 - 因此請確保您不要使用會阻塞此標志的編譯器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM