如何检查Make的语法,但请确保我没有执行?

时间:2011-10-11 15:48:42

标签: gnu-make

我们使用Make文件,并希望在HG中创建一个precommit check来检查Makefile语法。最初,我们的支票就是

make -n FOO.mk

但是,我们意识到如果Makefile在语法上是正确的,但需要设置一些环境变量,那么测试可能会失败。

有什么想法吗?我们的默认设置是编写我们自己的python脚本来检查普通Makefile错误的有限子集。

我们正在使用GNUmake。

2 个答案:

答案 0 :(得分:2)

让makefile依赖于环境变量并不是一个好主意。正是因为你提到的问题。

Variables from the Environment:

  

...不建议使用环境中的变量。 makefile在其控制之外设置的环境变量上依赖于它们的功能是不明智的,因为这会导致不同的用户从同一个makefile获得不同的结果。这违背了大多数makefile的整个目的。

答案 1 :(得分:-1)

对配方中的环境变量的引用需要一个$$前缀,因此找到对模式的引用并不困难' [$] [$] [{]或模式[$] [$] [AZ]将找到直接参考。一个非常简单的perl过滤器(sed脚本)可以找到它们。

要找到间接的,我会尝试仅使用PATH设置并将HOME设置为/ dev / null,并将SHELL设置为/ bin / false。 Make的宏SHELL不是环境$ SHELL,所以你可以让配方运行,你必须在配方文件中设置SHELL = / bin / sh来运行配方中的命令。这应该会动摇足够的数据来帮助你找到依赖。

您对结果所做的是另一个问题。