【问题标题】:conan cosumer file and producer file柯南消费者文件和生产者文件
【发布时间】:2020-05-20 13:37:31
【问题描述】:

我是柯南的新手,我已经浏览了几个关于柯南的 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 链接。

【问题讨论】:

    标签: c conan


    【解决方案1】:

    我不清楚图书馆的消费者如何知道图书馆的托管地点。

    库是在source 方法下下载的。它记录在 herehere

    如果您想开发配方,我建议您阅读 Creating Packages 文档部分。

    在这种情况下,什么是 folly/2019.10.21.00? 这是包参考,请阅读Getting Started部分。

    MyLibrary 的消费者 conanfile.txt 应该是什么样子?

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

    基本上我如何分发我的库

    您有两种主要选择,一种是本地的,最常见于公司,另一种是全球的,通常用于开源项目。

    Uploading Remotes

    Uploading to Bintray (global)

    Uploading to Artifactory (locally)

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

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

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

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

    【讨论】:

    • 感谢您的解释,能否请您在答案中附上解决方案,我已经为此发布了答案。
    • 我认为它们是不同的问题,我更喜欢保持而不是分开。无论如何,我无法确认你的食谱是否有效,但模板没问题。同样,所有这些信息都列在之前发布的链接中。
    【解决方案2】:

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

    制片人

    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"]
    

    消费者将以下文件放在包的根目录。

    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 .
    

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2018-11-17
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多