如何自动化检查Makefile文件的正确性?

46

我知道有许多针对编程语言的代码检查工具,如Python的pep8,但我从未遇到过适用于makefile的检查工具。是否有这样的makefile检查工具?

除了运行makefile来检测错误或问题之外,还有其他以编程方式进行检测的方法吗?

随着我对makefile的使用越来越深入,它变得越来越复杂和冗长,因此使用检查工具可以使makefile更易读。


这个显然应该移动到https://softwarerecs.stackexchange.com/。 - pjz
3个回答

20

显然事情已经发生了变化。我找到了以下内容:

两者中,截至2018年11月,Checkmake的开发更加活跃,但我还没有尝试过任何一种。


1
现在有一个新工具:https://github.com/christianhujer/makehelp/issues 免责声明:我是该工具的作者。 - Christian Hujer
@ChristianHujer 实际上看起来并不像是一个代码检查工具.. - drAlberT
1
@drAlberT 这是因为我粘贴了错误的链接。这是正确的链接:https://github.com/christianhujer/makelint。感谢您花时间指出这个问题。 - Christian Hujer

6
我并不知道如何查找make file lint(在网上搜索“make file lint”会把我带到这里),但这里有一些实现make file lint实用工具的浅显想法碎片的不完整列表...
  1. 空格是可读性的一个方面,因为制表符和空格在make文件中有不同的语义。默认情况下,Emacs makefile-mode 会在你试图保存具有错误空格制表符的make文件时警告你“可疑”的行。也许可以在批处理模式下运行emacs,并从该模式调用解析和验证函数。如果有人开始实现这样一个make file lint实用程序,那么Emacs lisp模式可能是一个有趣的检查点。

  2. 关于检查正确性,@Mark Galeck在他的回答中已经提到了--warn-undefined-variables。问题在于未定义但标准化变量有很多输出。为了改进这个想法,可以添加一个简单的包装器来过滤有关这些变量消息,以便发现真正的拼写错误。在这种情况下,make可以使用--just-print选项(也称为-n--dry-run)运行,以便不运行实际的命令来构建目标。

  3. 在使用--just-print选项运行make时不执行任何更改并不是一个好主意。我们可以搜索$(shell ...)函数调用,并尝试确保其中没有任何更改。我们可以首先检查以下内容:$(shell pwd)和一些其他常见的非破坏性用法是可以的,但其他任何情况都应引发手动检查的警告。

  4. 我们可以搜索不跟随($(可能类似于使用POSIX正则表达式表示的[$][^$(][[:space:]]),以捕获类似$VARIABLE的情况,它解析为$(V)ARIABLE,这可能不是作者想要的,也不是良好的风格。

make文件的问题在于它们具有所有嵌套结构,例如$(shell)$(call)$(eval)和规则评估;结果可以从环境或命令行输入或调用make调用而更改;此外,还有许多隐式规则或其他定义,使得进行任何更深层次的语义分析都很困难。我认为全面的make lint实用程序不可行(除了可能内置于make实用程序本身),但一些编码准则和启发式检查已经非常有用。


6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接