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