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

时间:2018-07-23 14:14:32

标签: git conan

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

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在用户的工作目录中克隆软件包存储库并签出正确的版本(例如,签出与所需版本对应的提交/标签)而不是使用[imports] ., * -> ./packages/pkg的来源,例如 ??? 我在pkg中发现了一个错误,我想在使用者的上下文中更正该错误并提供错误修正。

1 个答案:

答案 0 :(得分:1)

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

然后,如果在某些时候您具有不同版本的设置,选项和要求,则该方法相对脆弱,因为对于同一配方,您可能以不同的软件包结尾。记住1个配方=> N个“二进制”。即使您不是从源代码构建的,此关系也会被维护。当然,尝试将conan用作二进制文件(这是主要的用例)将解决此问题。

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

  • 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上执行最后一步MyDep,以便最新更改位于柯南本地缓存中。

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