17 个版本
使用旧的 Rust 2015
新版本 0.0.18 | 2024 年 8 月 17 日 |
---|---|
0.0.17 | 2024 年 1 月 15 日 |
0.0.12 | 2023 年 5 月 13 日 |
0.0.8 | 2023 年 4 月 29 日 |
#97 in 构建工具
310 每月下载量
105KB
2.5K SLoC
unmake: makefile 代码检查器
_
_ _ ___ _____ ___| |_ ___
| | | | | .'| '_| -_|
|___|_|_|_|_|_|__,|_,_|___|
关于
unmake
是一个强调可移植性的 makefile 代码检查器。我们针对 POSIX make 标准。
使用 unmake
,您可以开发实用的、可移植的 makefile
脚本,例如用于配置开发环境。
不需要更重的工具,如 Ansible、Docker、Lua、Python 或 WSL!只需老式的 make。
示例
$ cd fixtures/parse-valid
$ unmake .
warning: ./Makefile: MAKEFILE_PRECEDENCE: lowercase Makefile to makefile for launch speed
warning: ./boilerplate-ats.mk:4: SIMPLIFY_AT: replace individual at (@) signs with .SILENT target declaration(s)
warning: ./missing-posix.mk:1: STRICT_POSIX: lead makefiles with the ".POSIX:" compliance marker, or else rename include files like *.include.mk
...
有关更多选项,请参阅 unmake -h
。
请参阅 makefile,了解为这个 Rust 项目配置可移植开发环境的脚本的实时示例。
显著特性
unmake
对 POSIX 语法有比 make -n
更严格的读取。而 make -n
可能会根据控制流跳过不活跃的部分,而 unmake
会扫描每一行。例如,make -n
可能只检查特定于构建默认任务的指令。
实际上,这两个检查是 互补 的。 make -n
检查运行时的问题。 unmake
检查语法可移植性问题。
目录递归
unmake
会自动递归遍历目录。
在递归遍历目录时,unmake
会跳过符号链接。
unmake
的代码检查规则跳过了许多特定实现的文件,例如GNUmakefile
。
unmake
跳过了许多机器生成的 makefile。例如,由autotools、Perl和在使用Unix Makefile生成器(包括源代码构建和外部构建)的cmake生成的makefile。
unmake
跳过了任何位于如.git
、node_modules
或vendor
子目录中的第三方makefile。
要更详细地研究makefile,请参阅unmake
的--debug
或--inspect
命令行选项。
解析错误
unmake
可以识别低级makefile的怪癖,例如无效的语法。
有关更多信息,请参阅SYNTAX.md。
DRY RUN INTEGRITY CHECK
-n
/ --dry-run
执行外部make实现工具的透传dry run验证,例如bmake -nf
、gmake -nf
、make -nf
等。
根据POSIX,以加号(+
)为前缀的规则命令可以在dry run模式下继续执行。
unmake dry run检查的一些好处
- 捕获POSIX make superset解析错误(例如GNU和BSD)
- 捕获语义错误,例如缺失的目标定义
- 自动跳过cmake、Perl等常见机器生成的makefile
- 比手动
find
\xargs
片段更简单 - 减少日志噪声
unmake dry run选项积极地假设大多数makefile都是可构建的顶级项目配置,而不是名为include.mk
、*.include.mk
等的make include文件。
LIST MAKEFILES
-l
/ --list
输出unmake在给定文件路径中找到的任何匹配的makefile的路径。
这对于将大型make项目输入外部linters很有用。不幸的是,许多linters设计得很差,缺乏目录递归和自动文件类型识别。作为一个临时的解决方案,unmake可以通过xargs
将大型项目中的makefile子集导出到外部linters。
与dry run类似,list选项会自动跳过常见的机器生成的makefile。
当通过管道将unmake makefile列表传递给xargs时,我们建议为unmake添加--print0
标志,并添加-0
标志到xargs。这通知两个程序以空字符分隔的形式传输数据,以防止与文件路径中的任何空格相关的错误。
WARNINGS
unmake
可以识别makefile的高级可移植性建议。
有关更多信息,请参阅WARNINGS.md。
CRATE
https://crates.io/crates/unmake
API 文档
https://docs.rs/unmake/latest/unmake/
下载
https://github.com/mcandre/unmake/releases
从源代码安装
$ cargo install --force --path .
运行时要求
(None)
推荐
贡献
有关开发crit的更多详细信息,请参阅DEVELOPMENT.md。
许可证
BSD-2-Clause
更多示例
一些使用unmake
来保护其makefile的项目
另请参阅
- BSD make,一个带有BSD扩展的流行make实现
- cmake,一个具有自身可移植性功能的make相关构建系统
- GNU make,一个带有GNU扩展的流行make实现
- Grunt,Node.js任务运行器
- invoke,Python项目的任务运行器
- lake,Lua项目的任务运行器
- mage,Go项目的任务运行器
- ninja,一个无条件的快速构建系统
- nmake,.NET项目的make相关构建系统
- Rake,Ruby项目的任务运行器
- Shake,Haskell项目的任务运行器
- ShellCheck,POSIX sh家族脚本的语言检查器
- slick,一个POSIX sh语法验证器
- tinyrick,Rust项目的任务运行器
依赖关系
~3–12MB
~132K SLoC