在“升级”到Mavericks和
Xcode 5之后,我遇到了各种小问题,以使Xcode编译我的一些旧项目.
似乎Xcode正在向ld链接器传递一个新参数,并且实际上并没有阻止Xcode这样做.由于各种原因我需要的旧版本的ld在看到它不知道的参数时会出错(因此我的项目无法编译).
我需要的是在旧版本的ld上使用瘦包装来删除某些情况下的“坏”参数.我认为bash shell脚本是完美的,但bash不是我的强项.
这是我得到的:
# Look for conditions necessary to use older ld ... # (placeholder,obvIoUsly) # Run older ld (pseudo condition) if [ <old_ld_condition> ]; then ARGS='' for var in "$@"; do # Ignore known bad arguments if [ "$var" = '-dependency_info' ]; then continue fi ARGS="$ARGS $var" done /path/to/old/ld "$ARGS" else /path/to/new/ld "$@" fi
但是,运行/ path / to / old / ld“$ARGS”会导致ld将整个$ARGS字符串解释为一个参数.运行/ path / to / old / ld $ARGS会导致ld接收以前转义过的字符串的非转义版本.
显然,我误解了$@的本质,如何操纵它,以及如何将操作传递给旧的ld.感谢大家.
这应该工作:
# Run older ld (pseudo condition) if [ <old_ld_condition> ]; then ARGS=() for var in "$@"; do # Ignore known bad arguments [ "$var" != '-dependency_info' ] && ARGS+=("$var") done /path/to/old/ld "${ARGS[@]}" else /path/to/new/ld "$@" fi