工作空间文件¶
警告
此特性是新的孵化中特性的一部分。这意味着它正在开发中,并且正在寻求用户测试和反馈。更多信息请参阅孵化中章节。
工作空间由 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.txt
和 version.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
另请参阅
阅读工作空间教程章节。