【问题标题】:Do Conan Debug and Release Build_Types have Different Package Dependencies?Conan Debug 和 Release Build_Types 是否有不同的包依赖关系?
【发布时间】:2020-02-21 23:07:52
【问题描述】:


上下文:


当我遇到一些问题时,我试图在 gitlab 管道上构建我的项目。在 AWS 上的管道中运行 gitlab-ci.yml 时,在两个测试部分中,其中一个在 conan install 步骤中失败。

成功部分:

- conan install .. --build missing -s build_type=Release

失败的部分:

- conan install .. --build missing -s build_type=Debug

两者之间唯一真正的区别似乎是 conan build_type,因为两者都使用相同的 docker 映像。我猜测我从中得到的错误是由于 build_type 更改,使其尝试找到具有额外依赖项的额外包(soci 和 mariadb-connector)。

错误:

mariadb-connector-c/3.0.10@omitted/stable: Configuring sources in /root/.conan/data/mariadb-connector-c/3.0.10/omitted/stable/source

WARN: OpenSSL/1.1.0j@conan/stable: requirement zlib/1.2.11@conan/stable overridden by mariadb-connector-c/3.0.10@omitted/stable to zlib/1.2.11 
OpenSSL/1.1.0j@conan/stable: WARN: ----------MAKE OPENSSL 1.1.0j-------------

ERROR: mariadb-connector-c/3.0.10@omitted/stable: Error in source() method, line 23
    "https://downloads.mariadb.org/f/connector-c-{0}/mariadb-connector-c-{0}-src.zip".format(self.version))
    NotFoundException: Not found: https://downloads.mariadb.org/f/connector-c-3.0.10/mariadb-connector-c-3.0.10-src.zip

柯南文件:

from conans import ConanFile, CMake


class ProjectConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    requires = "rfc/2.2@ommited/stable", "soci/3.2.3@ommited/stable", "libxml2/2.9.9", "zlib/1.2.11"
    default_options = {"qt:openssl": "False", "qt:with_sqlite3": "False",
                       "qt:with_mysql": "False", "qt:with_odbc": "False", "qt:with_pq": "False"}
    generators = "cmake"

    def requirements(self):
        if self.settings.os == "Windows":
            self.requires("libiconv/1.15@bincrafters/stable")
            self.requires("qt/5.13.2@bincrafters/stable")

    def configure(self):
        if self.settings.os == "Windows":
            self.generators.append("qt")

    def imports(self):
        if self.settings.os == "Windows":
            self.copy("*.dll", dst="bin", src="bin")
            self.copy("*.pdb", dst="bin", src="bin")
        self.copy("*.dylib*", dst="bin", src="lib")
        self.copy("*.so*", dst="lib", src="lib")

我在网上搜索了一些关于conan package build_types的信息,但无法从官方文章中理解Debug和Release build_types之间的区别。我还查看了我的项目柯南文件(上图),在其中找不到调试和发布 build_types 之间的依赖关系的任何差异。


问题:

Conan Release 和 Debug build_types 可以有不同的包依赖关系吗?如果有,我在哪里可以找到它们?

如果它们不能有不同的包依赖关系,Release 和 Debug build_types 有什么区别?

如果我需要提供任何其他信息,请告诉我。

谢谢!

【问题讨论】:

  • 如果有人需要,我也可以提供完整的gitlab-ci.yml命令
  • 大概发布版本可以作为您平台的预构建包使用,但调试不是,构建失败,因为配方中的源位置似乎不正确
  • @AlanBirtles 是的,我们在源位置没有 mariadb 3.0.10,但你知道我在哪里可以找到调试构建类型的配方吗?

标签: c++ docker conan


【解决方案1】:

每个具有不同配置(设置、选项)的conan install 依赖于不同的包。由于柯南具有条件依赖,因此不同配置的依赖图可能会有很大差异

def requirements(self):
  if self.settings.build_type == "Release":
     self.requires("fastmath/1.0@myteam/channel")

即使没有条件依赖,用于每个配置的二进制包也是不同的。如果图表使用静态库(选项shared,默认情况下通常为False),则安装的软件包二进制文件与使用共享库时不同。

Release 和 Debug 包也是如此。尽管可以创建同时包含 Debug 和 Release 工件的包,但默认情况下 Release 和 Debug 配置打包在不同的包中。

在您的情况下,问题在于您有用于发布配置的包,但没有用于调试的包。该包的创建者没有创建和上传调试配置。

默认情况下,当找不到您的配置的二进制包时,Conan 也会引发错误。使用--build 策略,您可以告诉柯南从源代码构建该软件包,这就是上面发生的情况。当配方尝试从源代码构建时,第一步是调用source() 方法,这是尝试从互联网下载一些源代码,但没有这样做。实际上,https://downloads.mariadb.org/f/connector-c-3.0.10/mariadb-connector-c-3.0.10-src.zip url 会抛出 404 Not found。

具有该 URL 的配方应固定为指向正确的 URL,以便能够下载源代码。还建议在大多数情况下,软件包二进制文件应在 CI 中构建并上传到服务器(Artifactory,CE 版本是免费的),而不是在开发人员机器中构建。

【讨论】:

  • 很好的解释。所以调试 make_type 中可能缺少该包?我将更新工件来源并重试。此外,如果我使用与发布版本匹配的调试要求版本更新我的需求功能,这会解决问题吗?
  • 不清楚你的意思。即使 requirements() 函数完全相同,您也将依赖于 2 个不同的包二进制文件。检查docs.conan.io/en/latest/introduction.html#binary-managementdocs.conan.io/en/latest/…。配方是相同的,但每个配方可以有 N 个二进制文件。您确实需要创建软件包二进制文件的调试版本才能依赖它。您可以使用 -s mariadb-connector-c:build_type=Release 强制依赖另一个,但这可能会出现链接问题。
  • 我明白了。我再次阅读了答案和您的评论,我想我现在理解得更好了。你的意思是我的调试包二进制文件丢失了,所以当它试图从源代码中找到包时它失败了。我会看看我是否可以制作那个包裹,然后回复你。谢谢!
  • 还没有机会提出解决方案,但感谢您提供详细的回复!如果我有机会解决问题,我会在这里评论更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2014-11-01
相关资源
最近更新 更多