【问题标题】:Make dependency rule does not execute使依赖规则不执行
【发布时间】:2021-10-20 22:09:58
【问题描述】:

我想要实现的目标:为脚本创建虚拟环境、激活它并安装包依赖项的 make 规则。 (为方便起见,我创建了一个包含重新创建所需文件的存储库)。

这是我的 Makefile:

venv:
    @echo VENV
    virtualenv $@ -p python2

foo_requirements: requirements.txt venv .FORCE
    @echo PIP
    ( . venv/bin/activate && pip install -r $< )

.PHONY: foo_requirements

FOO_CMD_SCRIPT = foo.py

FOO_CMD = . venv/bin/activate && python2 $(FOO_CMD_SCRIPT)

$(FOO_CMD_SCRIPT): foo_requirements

#--- Usage ---
all: $(FOO_CMD_SCRIPT)
    $(FOO_CMD)

.FORCE:

目标all 仅用于测试,在现实生活中我会将内容放在foo.mk 文件中,并从另一个makefile 中包含它。

我的期望:

  • make all 查看依赖关系 FOO_CMD_SCRIPT (实际上是磁盘上文件的文件名)。依赖是 foo_requirements 规则 (PHONY)
  • 规则foo_requirements 具有文件依赖关系requirements.txtvenv。这里也有.FORCE,因为我不知道如何检查包安装是否已经完成。所以我认为应该发生的是:1. 没有任何依赖 requirements.txt(文件存在,没有规则) 2. 如果 venv 不存在,则运行规则。
  • venv 规则运行并创建目录时,运行规则的实际内容:pip install
  • 之后,all 的依赖应该已经完成​​,实际的命令应该运行了。

实际发生的情况:

  • venv 可以正常创建
  • pip 永远不会运行
  • 实际的命令永远不会运行

为什么规则foo_requirements的内容不运行?

同样,all 规则内容永远不会运行。

结果:

$ make
VENV
virtualenv venv -p python2
created virtual environment CPython2.7.18.final.0-64 in 46ms
  creator CPython2Posix(dest=/home/gauthier/tmp/test_mk/venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/gauthier/.local/share/virtualenv)
    added seed packages: pip==20.3.4, pkg_resources==0.0.0, setuptools==44.1.1, wheel==0.34.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator

【问题讨论】:

    标签: makefile dependencies


    【解决方案1】:

    如果您不另行说明,make 将始终在 makefile 中构建第一个目标(连同其任何先决条件)然后停止。

    makefile 中的第一个目标是venv,它没有先决条件,因此构建目标然后停止。

    您可以运行make &lt;target&gt; 来运行特定目标,例如make all

    或者您可以将all 目标作为makefile 中的第一个目标。

    或者你可以在你的makefile中添加.DEFAULT_GOAL: all

    How make Processes a Makefile

    【讨论】:

    • 我太傻了,我也想起来了。我打算删除这个问题,但既然你花时间回答,那我就顺其自然吧。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多