【问题标题】:Confusion about the architecture of Conan对柯南建筑的困惑
【发布时间】:2021-03-11 12:32:48
【问题描述】:

我正在尝试了解柯南的工作原理,并学习柯南的文档。
所以到目前为止我得到的是,从客户端,客户端编写了一个conanfile.txt 文件,其中包含一个[requirements] 部分,其中指定了项目的所有要求。
当客户端运行conan install - 柯南从~/.conan/profiles/default 读取客户端的设置(或者也可以通过柯南 CLI 指定另一个配置文件)并从远程下载相关的二进制包(假设它是'不存在于本地缓存中)对应于配置文件(如操作系统、体系结构等)。

我的困惑始于制作人方面。这是我目前得到的:为了创建一个包,您需要编写一个conanfile.py,它被称为recipe。这个秘籍描述了二进制包的构建。

docs 表示conan create 相当于:

$ conan export . demo/testing
$ conan install hello/0.1@demo/testing --build=hello
# package is created now, use test to test it
$ conan test test_package hello/0.1@demo/testing

有些地方我不明白:

  1. 为什么客户端下载配方?配方不是只需要创建包吗?
  2. 为什么客户的配置文件包含compiler 位?我可以理解osarch 例如,因为X86-Windows 客户端机器无法处理Linux 包或ARM 包,但为什么编译器是客户端指定配置的一部分?李>
  3. 配方包含一行 settings = "os", "compiler", "build_type", "arch" 文档说:

设置字段定义不同二进制包的配置。在此示例中,我们定义对操作系统、编译器、体系结构或构建类型的任何更改都将生成不同的二进制包。请注意,柯南为同一个配方的不同引入配置(在本例中为设置)生成不同的二进制包。

在哪里具体指定了在包创建过程中构建哪些配置?

  1. conan install 既用于包创建,也用于包消费?

【问题讨论】:

    标签: conan


    【解决方案1】:

    这里有一些答案:

    1. 为什么客户端下载配方?配方不是只需要创建包吗?

    是的,客户端会下载配方,因为如果二进制文件不适用于所需的包 ID,则该配方将用于构建源代码。 conan-center 中并非所有配置都可用。

    另外,build options 中的conan install 命令会影响其行为。下载配方比只下载包更方便。

    这种行为不会改变,因为它是柯南 1.0 的一部分,并且会破坏许多使用柯南缓存中的食谱的用户。

    1. 为什么客户端的配置文件包含编译器位?例如,我可以理解 os 和 arch,因为 X86-Windows 客户端机器无法处理 Linux 包或 ARM 包,但为什么编译器是客户端指定配置的一部分?

    不同的编译器提供不同的二进制文件。在 Windows 上,您可以使用来自 mingw 或 MSVC 的 gcc。在 Linux 上,您可以使用 clang 或 gcc,它们大部分时间都是兼容的,但会生成不同的二进制文件,包括优化级别。此外,还有与每个编译器相关的其他重要标志,例如 libcxx(libstdc++、libc++、libstdc++11)或 MSVC 运行时(MT、MD)。一些编译器版本只支持 C++11 (GCC 4.9),所以在构建项目时必须确定编译器的兼容性。基本上,它会影响ABI compatibility

    在哪里具体指定在包创建过程中构建哪些配置?

    包生成记录在案,请阅读:

    1. conan install 既用于创建包,也用于包消费?

    如果您想开发一个新的简单配方,在您的机器上构建并使用,那么conan create 就是这样。在创建新配方时,您将在 90% 的情况下使用 conan create。您可以阅读Development flow with Conan Create 部分了解更多信息。

    另一方面,conan install 主要用于包消费,但它也可以用于包创建。什么时候?

    • Development flow
    • 当您想安装一个包,但又想从源代码构建它时。

    背后的原因是因为conan install先出现,它被用于两个提议,但是我们需要更简单的东西来创建包,所以引入了conan create。但是,由于我们无法删除功能,由于向后兼容规则,conan install 仍然可以用作包创建者。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多