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,流程将是:
- 将
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-pkg
超过 [=18] =],所以最新的变化在柯南本地缓存中。
此流程是 conan Workspaces 旨在进一步自动化的内容:https://docs.conan.io/en/latest/developing_packages/workspaces.html。这个想法可能是有一个 conan workspace open MyDep/0.1@user/channel
来自动执行上述步骤,并将依赖项从本地缓存直接带到您当前的用户工作区。请注意,这尚未实现。
我有一个具有以下目录结构的纯源程序包:
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,流程将是:
- 将
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-pkg
超过 [=18] =],所以最新的变化在柯南本地缓存中。
此流程是 conan Workspaces 旨在进一步自动化的内容:https://docs.conan.io/en/latest/developing_packages/workspaces.html。这个想法可能是有一个 conan workspace open MyDep/0.1@user/channel
来自动执行上述步骤,并将依赖项从本地缓存直接带到您当前的用户工作区。请注意,这尚未实现。