我们使用Make文件,并希望在HG中创建一个precommit check来检查Makefile语法。最初,我们的支票就是
make -n FOO.mk
但是,我们意识到如果Makefile在语法上是正确的,但需要设置一些环境变量,那么测试可能会失败。
有什么想法吗?我们的默认设置是编写我们自己的python脚本来检查普通Makefile错误的有限子集。
我们正在使用GNUmake。
答案 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来运行配方中的命令。这应该会动摇足够的数据来帮助你找到依赖。
您对结果所做的是另一个问题。