工作区文件

警告

此功能是新孵化中功能的一部分。这意味着它正在开发中,并正在寻求用户测试和反馈。更多信息请参阅 孵化中章节

工作区由 conanws.yml 和/或 conanws.py 文件定义,这些文件将定义“根”工作区文件夹。

conanws.yml

工作区最基本的实现是 conanws.yml 文件。它定义了工作区的 packages(可编辑的包)。例如,一个定义了 2 个 packages 的工作区 conanws.yml 文件可以是:

conanws.yml
packages:
   - path: dep1
     ref: dep1/0.1
   - path: dep2
     ref: dep2/0.1

此外,它可能不包含 ref 字段,让 Conan 从相应的 path/conanfile.py 中读取 name/version

conanws.yml
packages:
   - path: dep1
   - path: dep2

conanws.py

conanws.yml 可以通过功能更强大的 conanws.py 进行扩展,后者遵循与 ConanFile 及其 conandata.yml 相同的关系。如果我们想动态定义 packages,例如根据文件夹中是否存在某些 name.txtversion.txt 文件,那么这些包可以在 conanws.py 中定义为:

conanws.py
import os
from conan import Workspace

class MyWorkspace(Workspace):

   def packages(self):
      result = []
      for f in os.listdir(self.folder):
         if os.path.isdir(os.path.join(self.folder, f)):
            with open(os.path.join(self.folder, f, "name.txt")) as fname:
               name = fname.read().strip()
            with open(os.path.join(self.folder, f, "version.txt")) as fversion:
               version = fversion.read().strip()
            result.append({"path": f, "ref": f"{name}/{version}"})
      return result

还可以重用 conanfile.py 中的逻辑,在 set_name()set_version() 方法中,使用 Workspace.load_conanfile() 辅助函数

conanws.py
import os
from conan import Workspace

class MyWorkspace(Workspace):
   def packages(self):
      result = []
      for f in os.listdir(self.folder):
         if os.path.isdir(os.path.join(self.folder, f)):
            conanfile = self.load_conanfile(f)
            result.append({"path": f, "ref": f"{conanfile.name}/{conanfile.version}"})
      return result

另请参阅

阅读 工作区教程 章节。