GCC 또는 Clang을 사용하여 코드를 컴파일하면 색상이 있는 오류가 출력될 수 있습니다.
그러나 연결된 코드는 동일한 사치를 누리지 못합니다. GNU 링커는 기본적으로 컬러 오류 출력을 지원하지 않는 것으로 보입니다.
해결책이 있나요? ld에서 링커 오류를 색상화/스타일화할 수 있습니까?
답변1
간단한 래퍼 스크립트를 사용하여 ld 출력의 색상을 지정할 수 있습니다.
/usr/local/bin/ld
실제 스크립트가 ld
있다고 가정하고 다음 스크립트를 저장했습니다 /usr/bin/ld
.
PATH
이제 해당 디렉토리에 대한 포인터를 변경할 수 있습니다 .
export PATH="/usr/local/bin:${PATH}"
다른 이름으로 저장 /usr/local/bin/ld
하고 실행chmod +x /usr/local/bin/ld
#!/usr/bin/env python3
import subprocess
import sys
import re
RED = '\033[91m'
GREEN = '\033[92m'
ENDC = '\033[0m'
def colorize_output(line):
pattern = r'([\/\w\.-]+):(\d+)'
colored_line = re.sub(pattern, RED + r'\1' + ENDC + ':' + GREEN + r'\2' + ENDC, line)
return colored_line
def run_ld(args):
process = subprocess.Popen(['/usr/bin/ld'] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
output = process.stdout.readline()
if not output and process.poll() is not None:
break
if output:
print(colorize_output(output.decode()), end='')
while True:
output = process.stderr.readline()
if not output and process.poll() is not None:
break
if output:
print(colorize_output(output.decode()), end='')
return process.poll()
if __name__ == '__main__':
# Pass all arguments to the ld command
exit_code = run_ld(sys.argv[1:])
sys.exit(exit_code)
유일한 문제는 스크립트가 먼저 인쇄된 stderr
다음 stdout
.
더 복잡한 스크립트는 경로를 스캔하여 올바른 ld
.