Conan Debug 和 Release Build_Types 是否具有不同的包依赖性?
Do Conan Debug and Release Build_Types have Different Package Dependencies?
上下文:
当我 运行 遇到一些问题时,我试图在 gitlab 管道上构建我的项目。 运行 AWS 管道中的 gitlab-ci.yml,在两个测试部分中,其中一个在柯南安装步骤中失败。
成功部分:
- 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
柯南档案:
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_type之间的区别。我还查看了我的项目 conan 文件(上图),但在其中找不到调试和发布 build_types 之间依赖关系的任何差异。
问题:
Conan Release 和 Debug build_type 可以有不同的包依赖关系吗?如果有,我在哪里可以找到它们?
如果它们不能有不同的包依赖关系,那么 Release 和 Debug build_types 之间有什么区别?
如果我需要提供任何其他信息,请告诉我。
谢谢!
具有不同配置(设置、选项)的每个 conan install
取决于不同的软件包。由于 Conan 具有条件依赖性,因此对于不同的配置,依赖关系图可能会大不相同
def requirements(self):
if self.settings.build_type == "Release":
self.requires("fastmath/1.0@myteam/channel")
即使没有条件依赖,每个配置使用的二进制包也是不同的。如果图表使用静态库(选项 shared
,默认情况下通常 False
)安装的包二进制文件与使用共享库时不同。
Release 和 Debug 包也是如此。虽然可以创建包含调试和发布工件的包,但默认情况下发布和调试配置打包在不同的包中。
在你的情况下,问题是你有发布配置包,但没有调试包。该包的创建者没有创建和上传调试配置。
默认情况下,当找不到您的配置的二进制包时,Conan 也会引发错误。使用 --build
策略,您可以告诉柯南从源构建该包,这就是上面发生的事情。当配方尝试从源代码构建时,第一步是调用 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 版是免费的),而不是在开发人员机器中构建。
上下文:
当我 运行 遇到一些问题时,我试图在 gitlab 管道上构建我的项目。 运行 AWS 管道中的 gitlab-ci.yml,在两个测试部分中,其中一个在柯南安装步骤中失败。
成功部分:
- 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
柯南档案:
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_type之间的区别。我还查看了我的项目 conan 文件(上图),但在其中找不到调试和发布 build_types 之间依赖关系的任何差异。
问题:
Conan Release 和 Debug build_type 可以有不同的包依赖关系吗?如果有,我在哪里可以找到它们?
如果它们不能有不同的包依赖关系,那么 Release 和 Debug build_types 之间有什么区别?
如果我需要提供任何其他信息,请告诉我。
谢谢!
具有不同配置(设置、选项)的每个 conan install
取决于不同的软件包。由于 Conan 具有条件依赖性,因此对于不同的配置,依赖关系图可能会大不相同
def requirements(self):
if self.settings.build_type == "Release":
self.requires("fastmath/1.0@myteam/channel")
即使没有条件依赖,每个配置使用的二进制包也是不同的。如果图表使用静态库(选项 shared
,默认情况下通常 False
)安装的包二进制文件与使用共享库时不同。
Release 和 Debug 包也是如此。虽然可以创建包含调试和发布工件的包,但默认情况下发布和调试配置打包在不同的包中。
在你的情况下,问题是你有发布配置包,但没有调试包。该包的创建者没有创建和上传调试配置。
默认情况下,当找不到您的配置的二进制包时,Conan 也会引发错误。使用 --build
策略,您可以告诉柯南从源构建该包,这就是上面发生的事情。当配方尝试从源代码构建时,第一步是调用 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 版是免费的),而不是在开发人员机器中构建。