我有一个具有以下目录结构的纯源软件包:
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
中发现了一个错误,我想在使用者的上下文中更正该错误并提供错误修正。
答案 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。有了这个仓库,流程将是:
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
以及这些详细信息。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
自动执行上述步骤,并将本地缓存中的依赖项直接带到当前用户工作空间。请注意,这尚未实现。