conan.io: 在消费者的工作目录中克隆包存储库

conan.io: clone package repository in consumer's working directory

我有一个具有以下目录结构的纯源程序包:

src (directory containing source files)
conanfile.py 

pkg 的配方conanfile.py 如下所示:(打包时复制所有内容)

from conans import ConanFile, CMake, tools

class PkgConan(ConanFile):
   name = "pkg"
   version = "0.0.1"
   license = "License of pkg here"
   url = "URL of pkg here"
   description = "Description of pkg here"
   settings = "os", "compiler", "build_type", "arch"
   generators = "cmake"

def package(self):
    self.copy("*")

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

我的包被一个集成项目使用,该项目将 pkg 的源复制到其工作目录中。 消费者的食谱 conanfile.txt 如下所示:

[requires]
   pkg/0.0.1@user/test

[imports]
   ., * -> ./packages/pkg

在集成项目中安装依赖项时,pkg 的源代码会按预期复制到使用者的工作目录中。
消费者的工作目录:

packages
   pkg
      src (directory containing pkg's source files)
      conanfile.py
conanfile.txt

这是我的用例pkg 使用 git 进行版本控制并上传到 GitHub。我想在消费者的工作目录中拥有 pkg 的整个 git 存储库,而不仅仅是 pkg 的源代码。
预期消费者的工作目录:

packages
   pkg (repository cloned from GitHub)
      .git
      src 
      conanfile.py
conanfile.txt   

??? conan 是否可以在消费者的工作目录中克隆包存储库并检出正确的版本(例如检出 commit/tag 对应于所需的版本)而不是使用来自 [imports] ., * -> ./packages/pkg ??? 的来源,例如我在 pkg 中发现了一个错误,我想在消费者的上下文中更正它并提供错误修复。

这是不可能的,至少对于您所遵循的方法和当前的柯南功能而言是不可能的。可能还有其他与柯南无关的问题,例如,“.git”文件夹可能无法重新定位到其他系统。

然后,如果在某些时候您有不同版本的设置、选项和要求,则该方法相对脆弱,因为对于相同的配方,您可能会以不同的包结束。请记住 1 个食谱 => N "binaries"。即使您不是从源构建,也会保持这种关系。当然,尝试将 conan 用于二进制文件(主要用例)将打破这一点。

我认为您可能对新的 SCM 功能感兴趣:https://docs.conan.io/en/latest/creating_packages/package_repo.html#capturing-the-remote-and-commit-from-git-scm-experimental。使用此 repo,流程将是:

  • scmauto 字段添加到您的食谱中。创建包时将捕获提交。
  • 使用你的包,比方说 MyPkg/0.1@user/channel,它依赖于 MyDep/0.2@user/channel
  • 如果您想在某个时候编辑 MyDep/0.2@user/channel,请检查其 SCM 详细信息:conan get MyDep/0.2@user/channel
  • git clone 这些细节。
  • 使用本地工作流程在本地编辑和构建该包:https://docs.conan.io/en/latest/developing_packages/package_dev_flow.html
  • 当您想要检查 MyPkg/0.1@user/channel 是否适用于 MyDep 的最新更改时,请确保 运行 最后一步 conan export-pkg 超过 [=18] =],所以最新的变化在柯南本地缓存中。

此流程是 conan Workspaces 旨在进一步自动化的内容:https://docs.conan.io/en/latest/developing_packages/workspaces.html。这个想法可能是有一个 conan workspace open MyDep/0.1@user/channel 来自动执行上述步骤,并将依赖项从本地缓存直接带到您当前的用户工作区。请注意,这尚未实现。