如何使GNU只在前提条件发生变化时才进行重建伪目标



在我的例子中,我有requirements目标,它安装所需的Python包,还有test,它运行测试并依赖于前一个。

安装依赖项是一项漫长的操作,我希望它只在requirements.txt更改时执行。我怎样才能做到这一点?

下面是Makefile的一个简化示例,我现在有了:

.PHONY: test requirements
requirements: requirements.txt
    pip install -r $<
test: tests/ | requirements
    py.test $^

正如@user1034749所指出的,Make比较了文件的修改次数。如果你想让它知道requirements.txt自上次安装以来的修改时间,你必须给它一个修改时间与上次安装时间相同的文件,这样它才能比较两者。换句话说,您必须有一个伪文件,并在执行安装时对其进行修改。你可以称之为任何你喜欢的东西,但我会称之为"安装":

.PHONY: test
installation: requirements.txt
    pip install -r $<
    touch $@
test: tests/ | installation
    py.test $^

最新更新