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