【发布时间】:2014-02-27 19:21:23
【问题描述】:
“升级”到 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 有一些误解。谢谢大家。
【问题讨论】:
-
你可以在Xcode中选择命令行工具集版本,不知道对你有没有帮助?通常,除非您进行了全新安装,否则旧的 SDK 和命令行工具集版本将共存。
-
这些项目是实际的 Xcode
.xcodeproj文件,不幸的是我无法将它们带到命令行构建过程(例如make)。不过感谢您的建议。
标签: bash shell arguments command-line-arguments