프로그램에 전달하기 전에 명령줄 옵션을 필터링합니다.

프로그램에 전달하기 전에 명령줄 옵션을 필터링합니다.

이것을 실행 중인데 cmake인식할 수 없는 플래그( -rdynamic)가 링커에 전달되어 오류가 발생합니다.
이 플래그를 어디서 가져온 것인지 알 수 없으므로 필터링하고 싶습니다.

를 지정할 수 있으므로 명령줄 인수를 읽고 잘못된 인수를 필터링한 다음 결과를 실제 링커에 다시 전달하는 프로그램을 -DCMAKE_LINKER=<linker>설정하고 싶습니다 .<linker>

나는 사용하고 있지만 awk '{gsub("-rdynamic", "");print}'stdin을 입력으로 만들고 ld를 출력으로 만드는 방법을 모르겠습니다.

답변1

스크립트 는 문자열 " "과 일치 bash하는 매개변수를 무시하고 -rdynamic다른 매개변수를 배열에 추가하여 해당 매개변수를 반복합니다. 인수가 부족해지면 ld필터링된 목록을 사용하여 실행됩니다.

#!/bin/bash

declare -a finalopts
finalopts=()

for o in "$@"; do
    if [ "$o" = "-rdynamic" ] ; then
        continue
    fi
    #add all other options to the list
    finalopts+=("$o")
done

exec ld "${finalopts[@]}"

관련 정보