柯南消费者档案和生产者档案

conan cosumer file and producer file

我是柯南的新手,我一直在浏览柯南的几个 youtube 视频,但我不清楚图书馆的消费者如何知道图书馆的托管地点。这是一个托管在 github 上的开源 C 项目,比方说在 github.com/username/foo

MyLibrary conanfile.py 看起来像这样

from conans import ConanFile

class Foo(ConanFile):
    def build(self):
        cmake = CMake(self)
        cmake.configure(source_dir="src")
        cmake.build()
        cmake.install()

我知道这个 conanfile.py 应该在我的 github 项目的根目录下。


图书馆的用户

我从 somewhere 中找到了这个文件,库的用户应该在他们的根目录中。

[requires]
folly/2019.10.21.00

[generators]
cmake
  1. 在这种情况下,folly/2019.10.21.00 是什么?
  2. MyLibrary 的消费者 conanfile.txt 应该是什么样子?
  3. 还请查看我的制作人档案。
  4. 基本上我如何分发我的图书馆

编辑:

对于 1) 我找到了答案 here 但是我该如何指定 github link 我已经找到了。

I'm not clear about how the consumer of the library will know where the library will be hosted.

库是通过source方法下载的。已记录 here and here

如果您想开发食谱,我建议您阅读文档中的 Creating Packages 部分。

What is folly/2019.10.21.00 in this case? It's the package reference, please, read the Getting Started section.

How my consumer conanfile.txt of MyLibrary should look like?

基本上,它应该包含您的包参考,仅此而已。请阅读 conanfile.txt 部分。

Essentially how can I distribute my library

您有两个主要选择,在本地,对公司最常见,在全球,通常对开源项目。

Uploading Remotes

Uploading to Bintray (global)

Uploading to Artifactory (locally)

当你现在开始学习柯南时,请仔细阅读入门部分并按照指南进行操作,它解释得很好,还包含一个很好的练习,有助于理解柯南的工作原理。

在自信地食用食谱后,我建议您阅读 Creating Packages 部分,其中包含来自提供者角度的信息。

阅读文档是最好的学习方式,跳过步骤会使您对某些功能更加困惑。

另外,Slack上有一个很好的求助和讨论频道,频道名称是#conan。

可以请编辑并将其附加到您的答案中。基本上我正在寻找一个完整的解决方案。以下是否正确?

制作人

from conans import ConanFile

class Foo(ConanFile):
    name = "foo"
    version = "0.1"
    license = "MIT"
    url = "https://github.com/username/foo.git"
    description = "My Open Source Library"
    settings = "os", "compiler", "build_type", "arch"
    options = {"shared": [True, False]}
    default_options = {"shared": False}
    generators = "cmake"

    def source(self):
        self.run("git clone https://github.com/username/foo.git")
        tools.replace_in_file("foo/CMakeLists.txt", "PROJECT(MyLibrary)",
                              '''PROJECT(MyLibrary)
        include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
        conan_basic_setup()''')

    def build(self):
        cmake = CMake(self)
        cmake.configure(source_dir="src")
        cmake.build()
        cmake.install()

    def package(self):
        self.copy("*.h", dst="include", src="src")
        self.copy("*hello.lib", dst="lib", keep_path=False)
        self.copy("*.dll", dst="bin", keep_path=False)
        self.copy("*.so", dst="lib", keep_path=False)
        self.copy("*.dylib", dst="lib", keep_path=False)
        self.copy("*.a", dst="lib", keep_path=False)

    def package_info(self):
        self.cpp_info.libs = ["mylibrary"]

Consumer 将以下文件放在包的根目录下。

conanfile.py

from conans import ConanFile

class MyConsumer(ConanFile):

    def source(self):
        self.run("git clone https://github.com/username/foo.git")

conanfile.txt

[requires]
foo/1.0.0

然后运行

conan install ..
cmake ..
cmake --build .