首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Conan和ReleaseBuild_Types是否有不同的包依赖关系?

Conan和ReleaseBuild_Types是否有不同的包依赖关系?
EN

Stack Overflow用户
提问于 2020-02-21 23:07:52
回答 1查看 5.2K关注 0票数 1

上下文:

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

成功部分:

代码语言:javascript
复制
- conan install .. --build missing -s build_type=Release

失败部分:

代码语言:javascript
复制
- conan install .. --build missing -s build_type=Debug

这两者之间唯一的真正区别似乎是conan build_type,因为它们都使用相同的码头图像。我猜想,由此产生的错误是由于build_type的更改,使它试图找到一个额外的包与额外的依赖(soci &mariadb-连接器)。

错误:

代码语言:javascript
复制
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

ConanFile:

代码语言:javascript
复制
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")

我在网上搜索了一些关于类型的内容,但是无法理解调试和官方文章中发布的build_types之间的区别。我还查看了我的项目conan文件(上面),没有发现其中的调试和发布build_types之间的依赖关系有任何不同。

问题:

build_types是否有不同的包依赖关系,如果它们存在,我会在哪里找到它们?

如果它们不能具有不同的包依赖关系,那么发行版和调试build_types之间有什么区别呢?

如果我需要提供更多的信息,请告诉我。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-23 22:47:42

每个具有不同配置(设置、选项)的conan install都取决于不同的包。由于Conan具有条件依赖关系,因此依赖关系图对于不同的配置可能有很大的不同。

代码语言:javascript
复制
def requirements(self):
  if self.settings.build_type == "Release":
     self.requires("fastmath/1.0@myteam/channel")

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

发行版和调试包也是如此。虽然可以创建包含调试和发布工件的包,但默认情况是在不同的包中打包发布和调试配置。

在您的示例中,问题是您有用于发行版配置的包,而不是Debug配置包。该软件包的创建者没有创建和上传Debug配置。

默认情况下,当找不到配置的二进制包时,Conan也会引发错误。使用--build策略,您可以告诉Conan从源代码构建这个包,这就是上面所发生的事情。当菜谱试图从源代码构建时,第一步是调用source()方法,这是试图从互联网下载一些源代码,但却失败了。实际上,https://downloads.mariadb.org/f/connector-c-3.0.10/mariadb-connector-c-3.0.10-src.zip url抛出一个404未找到。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60347350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档