工作空间文件

警告

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

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

conanws.yml

工作空间最基本的实现是 conanws.yml 文件。它定义了工作空间的 packages(可编辑的依赖项)和 products(根消费者)。例如,一个定义了 2 个 packages 的工作空间 conanws.yml 可以是

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

conanws.py

可以使用功能更强大的 conanws.py 扩展 conanws.yml,其关系类似于 ConanFile 与其 conandata.yml 的关系。如果我们要动态定义 packages,例如基于文件夹中某些 name.txtversion.txt 文件的存在,可以在 conanws.py 中定义 package,如下所示:

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[f"{name}/{version}"] = {"path": f}
      return result

还可以使用 Workspace.load_conanfile() 辅助方法,在 set_name()set_version() 方法中重用 conanfile.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)):
            conanfile = self.load_conanfile(f)
            result[f"{conanfile.name}/{conanfile.version}"] = {"path": f}
      return result

另请参阅

阅读工作空间教程章节。