gpt4 book ai didi

c++ - Conan Debug和Release Build_Type是否具有不同的程序包依赖关系?

转载 作者:行者123 更新时间:2023-12-02 10:05:30 28 4
gpt4 key购买 nike

内容:

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

成功的部分:

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

失败部分:
- conan install .. --build missing -s build_type=Debug

两者之间唯一真正的区别似乎是柯南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

ConanFile:
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之间有什么区别?

请让我知道是否需要提供其他信息。

谢谢!

最佳答案

具有不同配置(设置,选项)的每个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配置打包在不同的程序包中。

在您的情况下,问题在于您具有用于Release配置的软件包,但没有用于Debug的软件包。该程序包的创建者未创建并上传Debug配置。

默认情况下,当找不到用于配置的二进制程序包时,Conan也会引发错误。使用 --build策略,您可以告诉Conan从源代码构建该程序包,这就是上面的情况。当配方尝试从源代码构建时,第一步是调用 source()方法,这是尝试从Internet下载某些源代码,但未这样做。有效地, 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版是免费的),而不是在开发人员计算机中构建。

关于c++ - Conan Debug和Release Build_Type是否具有不同的程序包依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60347350/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com