[英]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.