用于管理存储库工作区的轻量级工具
wst的Python项目详细描述
工作区工具
ws
是用于管理代码存储库集合的轻量级工具。它是
旨在处理项目之间的粗略依赖关系,构建多个
以正确的顺序进行项目并向每个项目传递正确的标志(例如
pkg_config_path
和类似)。它不打算是一个成熟的建设
系统,但是应该只按照正确的顺序和
正确的环境胶。它所做的一切都可以用手做,所以
与替换现有的构建工具相比,它仅仅自动化了
在中手动指定--prefix
、设置env vars和重新生成项目
更改时请按正确顺序进行。
请注意,这些工具不直接处理源代码同步。那份工作是 留给回购和类似工具。
依赖关系
ws
取决于python3 pyyaml,您可以使用sudo apt install python3 yaml
或从顶部的pip3install-r requirements.txt
存储库。
安装
要安装ws
,可以在
存储库:python3 setup.py install<;在此处添加任何自定义选项>;
。你可以
同时使用pip:pip3安装。
从存储库的顶部。最后,如果你
希望安装的ws
直接符号链接到源目录
要成为代码的一次性副本,请使用激活
pip"开发模式"。这样,代码更改立即生效
重新运行安装步骤。
WS
ws脚本是与工作区交互的主要点。它
假设您已经使用repo
或其他工具同步了一堆代码
而且,除非您使用特殊选项,否则它假定您当前在某个位置
在ws
管理的源的根中。但是,你可以在任何地方
在那棵树里面,不必在树顶。
ws
的正常工作流程如下:
repo init -u MANIFEST-REPO-URL
repo sync
ws init -s repo
ws build
默认情况下,ws init
将在根目录中查找名为ws manifest.yaml
的文件
包含git repo
清单(我们传递的-u
当我们调用repo init时。此文件包含依赖项和生成系统
ws
管理的项目的信息。注意ws
不必
管理repo
管理的所有相同项目,但它可以。完整格式
forws manifest.yaml
位于自述文件的底部。
如果不使用git repo
工具,则可以传入自己的ws
通过ws init-s fs-m
清单。这允许您管理清单,但是
类似(例如子模块或手动)。
bash完成
如果您喜欢bash补全和快速键入内容,可以这样做:
. bash-completion/ws
并自动完成ws命令。
WS初始化
当您运行ws init
时,ws会在当前工作目录中创建一个.ws
目录
目录。此目录可以包含多个工作区,但始终存在
默认工作区,如果不指定
使用-w
选项替换工作区。创建多个
工作区是管理多个生成配置,例如单独的调试
发布版本。但是,同一.ws
目录中的所有工作区都将
仍然在相同的源代码上操作(在
ws manifest.yaml
)。
如果希望创建多个工作区,可以将ws init
与
这样做的理由。例如,ws init new
将创建一个新的工作区
调用了new
。H但是,在运行ws default new
之前,默认情况下不会使用它。也就是说,您还可以使用-w
对其进行操作(例如ws-w new build
)。
如果指定-m
,则可以手动指向要使用的ws manifest.yaml
。通过
默认情况下,这与包含Git回购清单的存储库相关(例如
如果在运行repo init
之后有一个.repo
目录,那么它是相对的
到.repo/manifests
)。如果指定-s fs
,则它可以指向
文件系统上的任何地方。
WS默认值
ws default
用于更改默认工作区(当您
不要指定-w
选项。
WS构建
ws build
是您运行的主命令。如果您没有指定参数,它将
构建repo知道的每个项目。如果指定项目或
项目列表,它将只生成那些项目,加上它们的任何依赖项。
此外,ws
将根据每个repo对源代码进行校验和,并避免
重建任何没有改变的东西。校验和逻辑使用git
速度和可靠性,因此由ws
管理的源代码必须使用git。
WS清洁
ws clean
清除指定的项目,如果没有参数,则清除所有项目
给出。默认情况下,它只运行底层构建的clean命令
系统(介子、cmake等)。如果您还使用-f/--force
开关,它将
而是删除整个生成目录,而不是信任底层
建立系统。
WS环境
ws env
允许您输入给定项目的生成环境。如果给出
没有参数,它在生成目录中为
项目。如果给定参数,它将从中运行指定的命令
目录。在这两种情况下,它都建立了正确的构建环境,所以构建
您可能使用的命令将正常工作,您可以检查
似乎错了。
ws env
的一个示例用法是手动构建某些内容或调整构建
以ws
不知道如何处理的方式配置给定项目。
WS配置
ws config
设置工作区范围或每个项目的配置设置。
支持以下设置:
工作区范围的设置
键入
:调试
或发布
。指定工作区生成类型。
每个项目设置
启用
:设置是否生成给定项目。通常你想 构建所有内容,但您可以满足 发行或手动构建并安装在工作区之外。args
:为直接传递的特定项目设置生成参数 对于构建器(例如cmake
或meson
)。example将传递-d key=val
来设置预处理器变量。
WS清单
ws
manifest是一个yaml文件,指定有关项目的一些内容ws
管理:
- 他们使用什么构建系统(目前支持
meson
和cmake
)。 - 他们对由
ws
管理的其他项目有哪些依赖关系
- 他们需要的任何特殊环境变量。
- 任何需要的特殊生成器选项(例如
-dcmake\u
选项类型)。这些 选项直接传递到每个构建系统中 修改。 - 应包括的任何其他清单。包含路径可以是绝对路径或 相对的。如果它们是相对的,则解释为相对于父对象 包含清单的目录。目录也可以包括在 哪种情况下目录文件中的每个清单文件都包含在内。
- 搜索清单的任何搜索路径li在"包含"中列出。可以是 绝对的或相对的。如果是相对的,它是相对于 此清单。
语法如下:
include:
- some-other-manifest.yaml
- some-directory-of-manifests
search-path:
- ../projects # a directory containing manifests
projects:
some-project:
build: meson
deps:
- gstreamer
- ...
targets:
- test
- docs
- install
env:
GST_PLUGIN_PATH: ${LIBDIR}/gstreamer-1.0
gstreamer:
build: meson
args:
- -D gtk_doc=disabled
在本例中,某些项目用
meson
构建,需要gstreamer
和
其他一些依赖关系。为了找到gstreamer插件,它需要
gst_plugin_path
设置。它使用模板语法引用${libdir}
,这将
填写项目的库路径。
以下是可用模板变量的完整列表:
- ${LIBDIR}: the library path for the project (what `LD_LIBRARY_PATH` will be
set to for the project's build environment.
- ${PREFIX}: the project's prefix (what you would pass to `--prefix`).