上下文:
当我遇到一些问题时,我正试图在gitlab管道上构建我的项目。在AWS上的管道中运行gitlab-ci.yml时,在两个测试部分中,其中一个在conan安装步骤上失败。
成功部分:
- conan install .. --build missing -s build_type=Release失败部分:
- conan install .. --build missing -s build_type=Debug这两者之间唯一的真正区别似乎是conan build_type,因为它们都使用相同的码头图像。我猜想,由此产生的错误是由于build_type的更改,使它试图找到一个额外的包与额外的依赖(soci &mariadb-连接器)。
错误:
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.zipConanFile:
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之间有什么区别呢?
如果我需要提供更多的信息,请告诉我。
谢谢!
发布于 2020-02-23 22:47:42
每个具有不同配置(设置、选项)的conan install都取决于不同的包。由于Conan具有条件依赖关系,因此依赖关系图对于不同的配置可能有很大的不同。
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版本是免费的),而不是在开发人员机器中构建的。
https://stackoverflow.com/questions/60347350
复制相似问题