如何从运行为“运行脚本构建阶段”的脚本中确定构建过程中ld命令的参数?
我把xcodebuild -dry-run
看作是一种选择,但是我需要理解我应该提供的论据是什么。
有什么好的解决方案吗?
编辑
当项目包含快速源代码时,xcodebuild似乎不支持LD和LDPLUSPLUS。因此,@fpotter提供的解决方案并不适用于快速的项目。
有什么想法吗?
发布于 2015-02-02 18:58:49
Xcode并没有公开一种很好的方法来做到这一点。在运行脚本构建阶段,您需要处理的就是在环境中提供给您的Xcode构建设置。
如果您确实需要ld
的整个参数列表,那么您可以使用一个黑客。使用LD
和LDPLUSPLUS
构建设置,您可以让Xcode调用自己的脚本,而不是真正的ld
。从该脚本中,您可以捕获args,调用真正的链接器,然后在那里执行您喜欢的任何后处理,而不是在运行脚本构建阶段。
你可以这样做:
为目标创建一个.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++
就这样。很丑,但很管用。
https://stackoverflow.com/questions/28283500
复制相似问题