工作区文件¶
警告
此功能是新孵化功能的一部分。这意味着它仍在开发中,并正在寻求用户测试和反馈。更多信息请参阅 孵化功能章节。
工作区由 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 从各自的 路径/conanfile.py 中读取 名称/版本
conanws.yml¶
packages:
- path: dep1
- path: dep2
conanws.py¶
一个 conanws.yml
文件可以通过一个更强大的 conanws.py
文件进行扩展,后者与 ConanFile
和其 conandata.yml
之间的关系类似。如果我们想动态定义 packages
,例如根据文件夹中是否存在 name.txt
和 version.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
另请参阅
阅读 工作区教程 章节。