基于python的构建系统,具有类似makefile的体验
HXMK的Python项目详细描述
HXMK(Hexcell品牌)
>
hxmk是hexcell项目的基于python的构建系统。它将类似makefile的体验带到熟悉而简单的环境中。
最棒的是:它有漂亮的颜色
安装
pip install HXMK
依赖关系:
- colorama>;=0.4.1
手册(最新版本)
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
用法
如果项目目录包含一个hxmk.py
文件,则可以执行
hxmk [args|rules]
参数的指定类似于name=value
和规则的指定,如name
hxmk abc=123 somerule
如果没有给出规则,hxmk将查找规则@everything
并执行它(如果它存在的话)。
默认情况下无需指定参数或规则。
hxmk # <- this is completely valid
hxmk也可用于清除目录。
hxmk clean [args|rules]
这将查找一个.clean
文件,该文件在每一行上都包含一个glob模式。
.clean
文件示例:
bin obj *.o __pycache__
clean
作为一条规则(尽管它不是实际的规则),因此如果没有像这样明确地声明,规则@所有的内容都不会运行:
hxmk clean everything # will clean and THEN run @everything
hxmk.py
规则
最简单的规则如下:
@rule()defeverything(c):pass
c
是类的一个实例,用于执行命令。为此,它会重载lshift运算符。
pip install HXMK0
规则可以有依赖关系。它们是通过返回注释给出的。a规则依赖项在它之前执行。
pip install HXMK1
列表或元组中提供了多个依赖项,无论您喜欢哪个。
pip install HXMK2
规则有触发器,它表示是否和何时执行规则。如果未指定触发器,则触发器始终
将设置为真
例如,要在缺少至少一个文件夹bin
和obj
时执行规则,可以执行以下操作:
pip install HXMK3
到目前为止实现了以下触发器:
始终
,始终执行规则。这是一个布尔。依赖项
,如果执行了一个或多个依赖项,则执行它。这是一个布尔。未找到
,在未找到指定路径(文件或文件夹)时执行。它可以是str
,列表
或元组
已更改
,缓存文件或文件列表。在缓存中找不到任何指定的文件或文件已更改时执行。它可以是str
,列表或
元组
如果给定了未找到的规范,则规则将假定您将创建规范路径化。如果在执行规则后找不到该路径,将显示警告。
缓存规则的示例:
pip install HXMK4
如果a.cpp
或b.cpp
已更改,或未找到程序
时,将执行上述规则。
不过,对于这种特殊情况,建议使用模式规则。
模式规则
模式规则是对多个文件执行多次的规则。 它们看起来像这样:
pip install HXMK5
(模式的语法为src->;dest
)
这基本上意味着src
中的每个.c
文件都将变成obj
中的.o
文件。
将对每个.c
文件执行模式规则。
这可用于编译目录中的每个.c
文件。
pip install HXMK6
模式规则可以有多个源和目标。在这种情况下,参数src
和dest
是列表。
pip install HXMK7
模式规则被缓存。 在执行之前,模式规则检查自上次生成以来源文件是否已被修改,以及目标文件是否已存在。如果目标文件不存在,则执行该规则,否则仅当源文件被修改或未在缓存中找到时才执行该规则。
内置设备
所有内置设备都可以立即使用,无需导入任何内容。
品牌
pip install HXMK8
make
将在另一个文件夹中启动hxmk。可选地,可以将参数(从cli args的意义上说)传递到args
默认情况下,根模块中的所有变量在make
调用的每个模块中都是可读的。通过将isolate
设置为true
pip install HXMK9
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
0
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
1
默认值
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
2
default
用于从cli中选择一个值,或者在找不到另一个值时将其默认为另一个值。第一个参数是名称,第二个参数是默认值。
例如:
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
3
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
4
作为参数
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
5
as_args
用于将列表用作cli参数。第一个参数是list、tuple或dict,关键字参数是prefix
和suffix
示例用例如下:
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
6
传入dict将为每个项目返回"key=value"
。
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
7
当传入dict时,不能使用前缀和后缀参数。
全球
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
8
glob
只是pythons标准库中的glob函数。有关详细信息,请查看其上的pythons文档
它可以与as_args结合使用来链接所有对象文件。
$ git clone https://github.com/Hexcell/HXMK.git
$ cd HXMK
$ pip install .
9
目标
主要目标是创建一个简单的构建,其功能与make相同(+more),同时保持可读性和合理性。
目前,hxmk运行得很好,但是已经并且很可能会有很多api更改。如果您发现错误,请毫不犹豫地创建一个问题。
待办事项
- [X]规则
- [X]模式eules
- [X]参数解析
- [X]生成子目录
- [X]清洁
- []为每个函数添加docstring和注释
- []完整的API文档
- []更好的跨平台支持/更多内置(mkdir,…)
- []使用各种python版本进行深入的兼容性测试
贡献
欢迎任何形式的贡献^^