如何使用 xcodebuild 构建特定架构?

Posted

技术标签:

【中文标题】如何使用 xcodebuild 构建特定架构?【英文标题】:How can I build a specific architecture using xcodebuild? 【发布时间】:2011-05-27 11:23:37 【问题描述】:

我有依赖于 32-bit 指针的遗留代码,并希望使用 xCodeBuildcommand line 构建该代码。由于某种原因,这不起作用。这是我使用的命令:

xcodebuild -configuration Debug -arch i386 
  -workspace MyProject.xcworkspace -scheme MyLib

这是我得到的输出

[BEROR]No architectures to compile for 
  (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

显然,它正在尝试构建 x86_64 代码并且失败得很惨,因为我只在 xCode 项目设置中从 VALID_ARCHS 启用了 i386

有没有办法让它明白我不想要 64-bit 库?

【问题讨论】:

【参考方案1】:

如果您希望xcodebuild 使用ARCHS 参数,则必须将ONLY_ACTIVE_ARCH 设置为NO。通过传递这些参数,您可以强制使用正确的架构。

xcodebuild ARCHS=i386 ONLY_ACTIVE_ARCH=NO -configuration Debug -workspace MyProject.xcworkspace -scheme MyLib

详情请见this reference。

【讨论】:

根据提供的参考资料看起来像使用 ONLY_ACTIVE_ARCH=YES 和 CURRENT_ARCH=i386 应该适用于我想做的事情,但 CURRENT_ARCH (或具有相同含义的 NATIVE_ARCH )但显然这两个变量不能被覆盖(并且似乎没有从文档中暗示它)。提议的方法确实有效(实际上,一旦您了解活动架构是构建系统的架构而不是您在 Xcode 中选择的架构,它就有意义了),但可能为该定义选择更好的词会有所帮助。谢谢! 你可以使用xcodebuild VALID_ARCHS=i386 CURRENT_ARCH=i386 ONLY_ACTIVE_ARCH=YES .... 只需添加 ONLY_ACTIVE_ARCH=NO 就可以了 对于 64 位模拟器/操作系统:ARCHS='x86_64' VALID_ARCHS='x86_64' Geoptima 在这里做什么? ONLY_ACTIVE_ARCH=NO 答案是正确的,你的评论没用【参考方案2】:

xcodebuild ONLY_ACTIVE_ARCH

xcodebuild ONLY_ACTIVE_ARCH...
//or
Build Settings -> Build Active Architecture Only -> ONLY_ACTIVE_ARCH

YES - 为连接的设备构建具有单一架构的二进制文件

NO - 为特定的-arch(valid architectures aka VALID_ARCHS) 构建二进制文件(如果已指定)或在其他情况下为所有架构构建二进制文件

建议使用Yes 进行调试(它可以节省构建时间),使用否进行发布构建。

注意:在模拟器上运行是安全的

要检查版本,请使用lipo -info[About]

【讨论】:

以上是关于如何使用 xcodebuild 构建特定架构?的主要内容,如果未能解决你的问题,请参考以下文章

使用 xcodebuild 从命令行构建 Cocoa 应用程序后,如何运行它?

如何将旧版构建系统与 Xcode 10 的“xcodebuild”一起使用?

如何获取xcodebuild的返回值?

如何在 xcodebuild 中添加多个方案?

如何在 Fastlane 中更改构建配置 - 通过 gym、build _app 或 xcodebuild

如何在 Coverity 中使用 xcodebuild?