首页 > 解决方案 > 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 目标构建良好,没有任何问题。

我试过了,没有效果:

这是项目的 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")

我可能会错过什么?

标签: c++xcodebuildcmakeconan

解决方案


我们已经设法通过一些特殊的方法解决了这个问题。

在构建失败的盒子上,我们将darwin-toolchain/1.0@theodelrieu/stableios.profile 更改为darwin-toolchain/1.0.4@theodelrieu/stable(这是最近构建的最新版本)。不知何故,一旦我们这样做了,盒子就开始正确地构建一切。这是我们与柯南一起使用的工具链,能够为 iOS 编译。

百万美元的问题是——为什么在使用去年 8 月发布的 darwin-toolchain 版本时构建项目的另一个盒子很好?可能是柯南的一个bug。


推荐阅读