【问题标题】:XCodebuild specifying target and linking a frameworkXCodebuild 指定目标并链接框架
【发布时间】:2014-12-04 10:16:40
【问题描述】:

我有一个项目,我需要在其中生成两个可执行文件,一个是 64 位 (x64_86),另一个是 32 位 (i386);它们不能组合。

该项目包括链接到第 3 方框架。

XCode 中的编译没有问题。

单独使用 xcodebuild 时(不传递参数),64 位二进制文​​件按预期构建,第 3 方框架与正确的引用链接。使用otool -L 显示

@rpath/Frameworks/thirdpartybundle.framework/Versions/A/thirdpartybundle

但是,当我编译 32 位二进制文​​件时,引用的框架是错误的,并且 otool -L 显示:-

@rpath/Frameworks/mytool32.framework/Versions/A/mytool32

其中 'mytool32' 是传递给 xcodebuild 的产品名称。我尝试使用以下命令构建 32 位版本:-

xcodebuild -project mytool.xcodeproj -scheme mytool VALID_ARCHS=i386 CURRENT_ARCH=i386 ONLY_ACTIVE_ARCH=NO ARCHS=i386 PRODUCT_NAME=mytool32

我也试过这个:-

xcodebuild -project mytool.xcodeproj -destination 'platform=OS X,arch=i386' -target mytool PRODUCT_NAME=mytool32

无论哪种方式,它们都会生成带有错误框架路径的二进制文件,替换为产品名称而不是框架名称。

如何使用 xcodebuild 构建 32 位版本,指定产品名称,但使用第三方框架的正确路径?

【问题讨论】:

  • 我可以假设您的第一个命令中的“PRDUCT_NAME”参数有错字吗?
  • @MichaelDautermann 是的,你可以 - 感谢您指出;O)

标签: xcode macos xcodebuild install-name-tool


【解决方案1】:

经过实验,生成用于 xcodebuild 的两个可执行文件(一个 32 位和一个 64 位)的最简单方法是使用 XCode 创建第二个目标,然后从第一个目标复制代码以供第二个目标使用, 在使用 xcodebuild 之前。

这允许独立设置每个目标的构建设置,然后可以与 xcodebuild 一起使用。

假设我们有两个目标; app_x64(64 位,产品名称设置为 app)和 app_x32(32 位,产品名称设置为 app32),我们可以使用 xcodebuild 构建两者:-

xcodebuild -target app_x64
xcodebuild -target app_x32

这会生成所需的可执行文件。如果使用 3rd 方框架,只需确保为两个目标设置依赖项即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2023-03-25
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多