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 构建工具

Download history 98/week @ 2024-05-13 145/week @ 2024-05-20 216/week @ 2024-05-27 224/week @ 2024-06-03 226/week @ 2024-06-10 214/week @ 2024-06-17 221/week @ 2024-06-24 208/week @ 2024-07-01 455/week @ 2024-07-08 40/week @ 2024-07-15 15/week @ 2024-07-22 51/week @ 2024-07-29 19/week @ 2024-08-05 225/week @ 2024-08-12

310 每月下载量

BSD-2-Clause

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跳过了任何位于如.gitnode_modulesvendor子目录中的第三方makefile。

要更详细地研究makefile,请参阅unmake--debug--inspect命令行选项。

解析错误

unmake可以识别低级makefile的怪癖,例如无效的语法。

有关更多信息,请参阅SYNTAX.md

DRY RUN INTEGRITY CHECK

-n / --dry-run执行外部make实现工具的透传dry run验证,例如bmake -nfgmake -nfmake -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的项目

  • buttery,一个GIF循环播放器
  • crit,一个Rust交叉编译器
  • factorio,一个Go交叉编译器
  • octane,一个MIDI转发器
  • slick,一个POSIX sh语法验证器

另请参阅

  • 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