makefile - Makefile:要么满足先决条件
问题描述
这是基于 Python 的应用程序的 Makefile 的相关部分。目标是制定规则,其中存在或满足 目标依赖关系。$pylib
$pylib-editable
pylib = $(VIRTUAL_ENV)/$(PY_SITEPACKAGES)/pylib/__init__.py
pylib-editable = $(VIRTUAL_ENV)/$(PY_SITEPACKAGES)/pylib.egg-link
pylib-any = $(or $(realpath $(pylib-editable)),$(pylib))
$(pylib-editable): requirements/.requirements.installed | $(VIRTUAL_ENV) vendor/pylib
# this creates pylib.egg-link
pip install --ignore-installed --no-deps -v -e vendor/pylib
.PHONY: pylib-editable
pylib-editable:
-$(RM) $(pylib-editable)
$(MAKE) $(pylib-editable)
.PHONY: pylib
pylib: $(pylib)
$(pylib): requirements/.main.installed vendor/pylib | $(VIRTUAL_ENV)
# this creates pylib/__init__.py
pip install --ignore-installed --no-deps -v vendor/pylib/
# Install Python (just release) dependencies
.PHONY: py-deps
py-deps: $(pylib-any) requirements/.main.installed | $(VIRTUAL_ENV)
# Install Python (development & release) py-deps
.PHONY: py-deps-dev
py-deps-dev: $(pylib-editable) py-deps requirements/.dev.installed
(其他规则取决于py-deps
/ py-deps-dev
)
如果在运行时找到其中一个/文件,则上述pylib-any
先决条件似乎有效,但如果那里什么都没有并被评估,那么两个目标都将被执行。我认为这是因为在目标解析期间评估一次,而不是在执行后再次评估?$pylib
$pylib-editable
make
py-deps-dev
pylib-editable
pylib
$(or ...)
pylib-editable
如果它是白手起家:
- 通过
py-deps
我希望它调用$pylib
- 通过
py-deps-dev
我想调用$pylib-editable
.
有没有一种干净/优雅的方法来解决它?也许通过双冒号规则?
解决方案
推荐阅读
- leaflet - 从传单输出地图中删除粗蓝色边界线/防止地图在弹出窗口出现时部分消失
- c# - 遍历 DataTable 中的行:获取单元格值时,“无法使用 [] 将索引应用于“对象”类型的表达式
- javascript - Quizmaker:可拖动两次
- nginx - 如何设置 nginx 将请求代理到我的 Web 应用程序?
- sql - 如果提供了全名,如何在名字末尾显示带有特定字母的名字?
- html - 我将如何悬停兄弟元素?
- python - 有没有办法在不使用 client = discord.Client() 而不是 Python 上的机器人的情况下踢成员
- java - JaxRs Client 2.0 文件上传
- python - “yolov5x.pt 与模型/yolov5x.yaml 不兼容。指定 --weights '' 或指定与 yolov5x.pt 兼容的 --cfg。”
- mysql - 将 ENUM 中定义的值在 MariaDB 中排序是否有任何性能优势?