XCodebuild指定目标和链接框架

3

我有一个项目需要制作两个可执行文件,一个是64位(x64_86),另一个是32位(i386);它们不能合并。

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

在XCode中编译没有问题。

当仅使用xcodebuild(不传递参数)时,64位二进制文件会按预期构建,并将第三方框架与正确的引用链接在一起。使用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”参数是一个笔误吗? - Michael Dautermann
@MichaelDautermann 是的,你可以这样做 - 感谢你指出来 ;O) - TheDarkKnight
1个回答

1

经过试验,使用XCode创建第二个目标,然后将第一个目标的代码复制到第二个目标中供xcodebuild使用,是生成两个可执行文件(一个32位和一个64位)以便与xcodebuild一起使用的最简单方法。

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

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

xcodebuild -target app_x64
xcodebuild -target app_x32

这将生成所需的可执行文件。如果使用第三方框架,请确保为两个目标设置依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接