Cal*_*m M 1 dependencies makefile
我有一个 Makefile,如下所示:
.PHONY: aws-deps
requirements.txt: Pipfile Pipfile.lock
pipenv lock -r > $@
aws-deps: requirements.txt
pip3 install --upgrade --target aws_src/ -r $<
Run Code Online (Sandbox Code Playgroud)
如果我运行make requirements.txt多次,它会正确地说它是最新的。但是,如果我运行make aws-deps它,它的行为不会像我期望的.PHONY目标那样,它每次都会运行,无论是否requirements.txt发生变化。例如,先删除requirements.txt:
$ make aws-deps
pipenv lock -r > requirements.txt
pip3 install --upgrade --target aws_src/ -r requirements.txt
<snip>
$ make aws-deps
pip3 install --upgrade --target aws_src/ -r requirements.txt
<snip>
Run Code Online (Sandbox Code Playgroud)
我是否误解了.PHONY部门的工作?我希望 aws-deps 仅在其先决条件发生变化时才执行某些操作,即我对 requests.txt 进行了更改 - 有人知道我在使其正常工作时缺少什么吗?
谢谢!
.PHONY目标告诉 make 将目标视为不是文件,即使可能存在与该目标同名的文件。由于此处没有指定文件aws-deps,因此.PHONY对您的情况没有真正的影响。相反,make 没有任何东西可以比较 to 的时间戳,并假设必须运行requirements.txtfor 的规则。aws-deps您可以通过以下方式更改此行为
AWS_DEP = .aws-deps-done # hidden file to compare a timestamp against
.PHONY: aws-deps
aws-deps: $(AWS_DEP)
$(AWS_DEP): requirements.txt
pip3 install --upgrade --target aws_src/ -r $<
@touch $@
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |