如何从作为“运行脚本构建阶段”运行的脚本内部确定构建过程中 ld 命令的参数是什么?
我曾xcodebuild -dry-run
将其视为一种选择,但随后我需要了解我提供的论点应该是什么。
任何想法的强大解决方案?
编辑:
当项目包含 swift 源代码时,xcodebuild 似乎不支持 LD 和 LDPLUSPLUS。因此,@fpotter 提供的解决方案不适用于 swift 项目。
有什么想法吗?
如何从作为“运行脚本构建阶段”运行的脚本内部确定构建过程中 ld 命令的参数是什么?
我曾xcodebuild -dry-run
将其视为一种选择,但随后我需要了解我提供的论点应该是什么。
任何想法的强大解决方案?
编辑:
当项目包含 swift 源代码时,xcodebuild 似乎不支持 LD 和 LDPLUSPLUS。因此,@fpotter 提供的解决方案不适用于 swift 项目。
有什么想法吗?
Xcode 没有公开一个很好的方法来做到这一点。在运行脚本构建阶段,您只需使用环境中提供给您的 Xcode 构建设置。
如果你真的需要整个参数列表ld
,你可以使用 hack。使用LD
和LDPLUSPLUS
构建设置,您可以让 Xcode 调用您自己的脚本,而不是真正的ld
. 从该脚本中,您可以捕获参数,调用真正的链接器,然后在那里进行您喜欢的任何后期处理,而不是在运行脚本构建阶段。
您可以这样做:
为您的目标创建一个 .xcconfig。
它应该如下所示:
LD = $(SRCROOT)/ld-wrapper/clang
LDPLUSPLUS = $(SRCROOT)/ld-wrapper/clang++
SRCROOT 指向你的项目目录。仅当您的应用程序具有 C++ 或 ObjC++ 代码时才需要 LDPLUSPLUS 行。如果您不想创建 xcconfig,您还可以通过 Xcode UI 将它们添加为用户定义的构建设置。
创建 Xcode 调用的包装脚本。
在以下位置安装这样的脚本<your project root>/ld-wrapper/wrapper.sh
:
#!/bin/bash
set -o errexit
# Choose which clang to run (clang or clang++) depending on how we're invoked.
# If we're invoked via the 'clang' link, we'll run 'clang'. If we're invoked
# via the 'clang++' link, we'll run 'clang++'.
CLANG_PATH="$DEVELOPER_DIR"/Toolchains/XcodeDefault.xctoolchain/usr/bin/$(basename "$0")
"$CLANG_PATH" "$@"
echo "clang args: $@"
echo "do any post processing here."
为 clang 和 clang++ 的包装脚本创建符号链接:
cd <project root>/ld-wrapper
ln -s wrapper.sh clang
ln -s wrapper.sh clang++
而已。这很丑陋,但它有效。