仅当先决条件更改时,如何使GNU make才能重建假目标?

Gil*_*tes 6 makefile gnu-make

就我而言,我有requirements目标,该目标安装了所需的Python软件包test,并运行了测试,并取决于先前的测试。

安装依赖项是一项很长的操作,我希望仅在requirements.txt更改时才执行。我该如何实现?

这是我现在拥有的Makefile的简化示例:

.PHONY: test requirements

requirements: requirements.txt
    pip install -r $<

test: tests/ | requirements
    py.test $^
Run Code Online (Sandbox Code Playgroud)

Bet*_*eta 3

正如@user1034749指出的,Make会比较文件的修改时间。如果你想让它知道requirements.txt自上次安装以来修改时间是什么时候,你必须给它一个修改时间与上次安装时间相同的文件,以便它可以比较两者。换句话说,您必须有一个虚拟文件,并在执行安装时修改它。你可以随意称呼它,但我将其称为“安装”:

.PHONY: test

installation: requirements.txt
    pip install -r $<
    touch $@

test: tests/ | installation
    py.test $^
Run Code Online (Sandbox Code Playgroud)