CMake构建失败,Xcode 12和CMake_IOS_安装_组合=是
编辑这是一个CMake构建失败,Xcode 12和CMake_IOS_安装_组合=是,cmake,xcode12,Cmake,Xcode12,编辑这是一个 使用Xcode 11(特别是Xcode 11.2.1),我过去可以使用以下命令交叉编译iOS项目: cd /path/to/project mkdir build cd build cmake .. -G Xcode -DCMAKE_SYSTEM_NAME=iOS \ "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ -DCMAKE_XCODE_ATTRI
使用Xcode 11(特别是Xcode 11.2.1),我过去可以使用以下命令交叉编译iOS项目:
cd /path/to/project
mkdir build
cd build
cmake .. -G Xcode -DCMAKE_SYSTEM_NAME=iOS \
"-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DCMAKE_IOS_INSTALL_COMBINED=YES \
-DCMAKE_INSTALL_PREFIX=install
cmake --build . --config Release --target install
这创建了一个包含两个部分的构建,一个部分用于arm64
体系结构(用于在真实设备上运行),另一个部分用于x86_64
体系结构(用于在基于Intel的开发环境上的模拟器中运行)
升级到Xcode 12(特别是Xcode 12.3)后,这将不再有效。生成始终失败,并显示此错误消息(我添加了换行符):
问题似乎是CMake为install
目标创建的构建后规则。在该生成后规则中,当第一个生成仍在进行时,将启动第二个生成
if test "$CONFIGURATION" = "Release"; then :
cd /path/to/project/build/ios
/usr/local/Cellar/cmake/3.19.2/bin/cmake -DBUILD_TYPE=$CONFIGURATION -DEFFECTIVE_PLATFORM_NAME=$EFFECTIVE_PLATFORM_NAME -P cmake_install.cmake
fi
当我不再将CMAKE\u IOS\u INSTALL\u COMBINED
设置为YES
时,构建成功,但是生成的构建只包含一个片段(arm64
,在我的例子中,可能是因为这是CMAKE\u OSX\u架构
中列出的第一个架构)
我正在考虑为每一个架构创建一个单独的构建,然后手动将各个部分缝合在一起。在我走这条路之前,有人能找到一个更优雅的解决方案吗
环境:macOS 11.1、Xcode 12.3、CMake 3.19.2包含以下提示:
Xcode生成器现在在为Xcode 12.0或更高版本生成时使用Xcode“新构建系统”。请参阅CMAKE\u XCODE\u BUILD\u系统
变量。可以使用-T buildsystem=1
切换到旧版生成系统
因此,目前的解决方法是将-T
选项添加到生成系统命令行:
cmake .. -G Xcode -T buildsystem=1
-DCMAKE_SYSTEM_NAME=iOS \
"-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DCMAKE_IOS_INSTALL_COMBINED=YES \
-DCMAKE_INSTALL_PREFIX=install
只要Xcode仍然支持旧版构建系统,这就应该可以工作。在这件事上,政府有这样的说法:
旧版生成系统已弃用,将在将来的版本中删除。(62742902)
因此,-T buildsystem=1
选项只能被视为临时解决方案。包含以下提示:
Xcode生成器现在在为Xcode 12.0或更高版本生成时使用Xcode“新构建系统”。请参阅CMAKE\u XCODE\u BUILD\u系统
变量。可以使用-T buildsystem=1
切换到旧版生成系统
因此,目前的解决方法是将-T
选项添加到生成系统命令行:
cmake .. -G Xcode -T buildsystem=1
-DCMAKE_SYSTEM_NAME=iOS \
"-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DCMAKE_IOS_INSTALL_COMBINED=YES \
-DCMAKE_INSTALL_PREFIX=install
只要Xcode仍然支持旧版构建系统,这就应该可以工作。在这件事上,政府有这样的说法:
旧版生成系统已弃用,将在将来的版本中删除。(62742902)
因此,-T buildsystem=1
选项只能被视为临时解决方案