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
파이프의 반환 코드가 0이 되거나 0이 아닌 코드(예:(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