GNU 링커 색상 지정

GNU 링커 색상 지정

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.

관련 정보