c++ - C++ 项目依赖项无法在特定的 macOS 机器上编译
问题描述
我们有一个跨平台的 C++ 项目,它使用 CMake 构建系统,使用 Conan 进行依赖管理。
在特定 macOS 机器上构建时,构建失败(构建日志)。它不会在运行相同版本的操作系统、CMake、Xcode 和 Conan(Conan 版本:macOS 10.14.3 (18D109) 和 CMake 3.14.0-rc2 上的 1.12.3)的不同 macOS 机器上失败。这是成功构建的示例。
两个构建日志都是由构建机器上不存在的 ~/.conan 目录的构建生成的。
请注意,只有 iOS 目标的构建才会失败。同一盒子上的 macOS 目标构建良好,没有任何问题。
我试过了,没有效果:
- 核弹~/.conan
- 卸载并重新安装 Xcode
这是项目的 conanfile.py:
from conans import ConanFile, CMake
from conans.tools import os_info
class SphereGameConan(ConanFile):
generators = "cmake"
settings = "arch", "build_type", "compiler", "os"
requires = (
"gtest/1.8.1@bincrafters/stable",
"spdlog/1.3.0@bincrafters/stable",
)
def requirements(self):
if self.settings.os == "Windows" or self.settings.os == "Macos":
self.requires("glfw/3.2.1@bincrafters/stable")
我可能会错过什么?
解决方案
我们已经设法通过一些特殊的方法解决了这个问题。
在构建失败的盒子上,我们将darwin-toolchain/1.0@theodelrieu/stable
ios.profile 更改为darwin-toolchain/1.0.4@theodelrieu/stable
(这是最近构建的最新版本)。不知何故,一旦我们这样做了,盒子就开始正确地构建一切。这是我们与柯南一起使用的工具链,能够为 iOS 编译。
百万美元的问题是——为什么在使用去年 8 月发布的 darwin-toolchain 版本时构建项目的另一个盒子很好?可能是柯南的一个bug。
推荐阅读
- c++ - 如何根据派生类成员的存在来启用/禁用成员函数?
- hive - 从子查询/连接的结果中过滤分区时,Hive Query 将进行全表扫描
- reactjs - 如何为 Sanity 序列化程序对象定义 proptypes
- google-cloud-platform - GCP Http 负载均衡器
- sql - 应用 PIVOT 运算符时出错
- javascript - Nexe 模块命令“nexe”未找到错误
- context-free-grammar - L{a^nb^md^n 其中 n>=0,m=2n 的上下文无关文法
- flutter - 使用带有 ListView.separated 的扩展小部件
- powershell - 无法导出网站模板
- python - 如何过滤和找出熊猫数据框中某种数据类型的所有列?