在传递给程序之前过滤掉命令行选项

在传递给程序之前过滤掉命令行选项

我正在运行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[@]}"

相关内容