1

我有一个仅包含以下目录结构的源包:

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

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

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

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

4

1 回答 1

1

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

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

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

  • scm,auto字段添加到您的食谱中。创建包时将捕获提交。
  • 使用你的包,比如说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-pkgMyDep以便最新更改在柯南本地缓存中。

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

于 2018-07-23T15:14:24.543 回答