make / cmakeスクリプトを使用するときは、通常VERBOSE = 1を使用し、すべてのコマンドが実行されることを確認する必要があります。これは私がよくすることであり、命令のソースを探している人には完全にストレスを与えます。
私たちはしばしば30行のラップされたパラメータを持ち、コマンドのソースは難読化されています。
一般的なコマンドを際立たせるために色を指定できますか?私は彼らが彼らの主張を避けるようにしなければなりません。それがすべてです。
bash、zsh、またはこの機能をサポートするすべてのシェルを使用できます。これが一般的に可能かどうかを知りたいです。
答え1
私は「警告」と「エラー」という単語に色を付けるのが好きなので、シェル起動ファイルでこれを行います。
make(){
local subst
subst+="s/error/\x1b[1;31m&\x1b[0m/g; "
subst+="s/warning/\x1b[1;33m&\x1b[0m/g; "
subst+="s/undefined reference/\x1b[1;35m&\x1b[0m/g; "
# For debugging
# echo "subst = '$subst'"
(
set -o pipefail
CLICOLOR_FORCE=yes_please command make "$@" 2>&1 | sed --unbuffered "${subst}"
)
}
error
my、warning
および代わりに正しい正規表現を使用すると、進行undefined reference
中の出力がかなり強調表示されることがあります。
以下はいくつかの詳細です。
理解していないため、
\x1b
inを使用する必要があります。sed
\033
&
行の一致する部分に展開されます。--unbuffered
これは必須です。それ以外の場合、make コマンド全体が完了すると、出力は大きなチャンクとして表示されるか、単一チャンクとして表示されます。command
make
シェル関数への再帰呼び出しを避けてください。"@"
シェル関数に与えられた引数をmake
に渡します。これにはその他の項目がcommand make
含まれます。VERBOSE=1
CLICOLOR_FORCE
CMakeによって生成されたMakefileからカラー出力を取得することです。出力がTTY(パイプなど)でない場合、通常はオフになります。set -o pipefail
パイプは通常、パイプの最後のコマンドの戻りコードを取得するため、サブシェルです。すべてのコマンドが0を返す場合、このオプションを有効にすると、pipefail
パイプの戻りコードがゼロになるか、ゼロ以外のコード((exit 8) | true | (exit 9) | true
戻りコード9など)を返す最も右側のコマンドの戻りコードが発生します。サブシェルを使用する理由は、set -o pipefail
ユーザーのシェルに影響を与えないためです。
見るhttps://en.wikipedia.org/wiki/ANSI_escape_code#Colorsカラーコード用。
通常、CMakeで生成されたMakefileの出力は同じ色を持ちますが、[ 42%] Building C object source_file.c.o
CMakeLists.txtを使用して変更できますset(CMAKE_COLOR_MAKEFILE [ON|OFF])
。
出力がmake
ttyでない場合(たとえば、色も消えます)。この場合、make | cat
環境変数(またはnull以外の値)を設定して強制的に色を出力できます。しかし、`CLICOLOR_FORCEがオフになっても効果はありません。CLICOLOR_FORCE=yes_please
CMAKE_COLOR_MAKEFILE
アイテムがあなたのものではなく閉じCMAKE_COLOR_MAKEFILE
ている場合は、リストにいくつかの選択肢を追加することで補償できます。
また、これはCLICOLOR_FORCE
他のコマンドで検証される変数なので、export CLICOLOR_FORCE=yessir
シェルの起動ファイルを入力すると、必要なものよりも多くの影響があります。私はそれをしません。
引用するCMAKE_COLOR_MAKEFILE
:https://cmake.org/cmake/help/latest/variable/CMAKE_COLOR_MAKEFILE.html