Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake构建失败,Xcode 12和CMake_IOS_安装_组合=是_Cmake_Xcode12 - Fatal编程技术网

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
选项只能被视为临时解决方案