【发布时间】:2022-08-18 16:28:50
【问题描述】:
我试图让 GNU Make 在子目录中运行一些规则。简而言之:我有一个包含多个 Python 源目录(AWS lambdas)的项目,每个目录都有一个 pyproject.toml 文件,并且依赖项安装由诗歌管理。对于每个子目录,我需要安装 pyproject.toml 中提到的包,它会创建一个poetry.lock 文件,然后使用该文件生成一个 requirements.txt 文件(该文件被部署到 AWS 并在那里使用)。
这是我到目前为止所得到的:
POETRY := $(shell command -v poetry 2> /dev/null)
PY_LAMBDAS := $(dir $(wildcard src/python/*/pyproject.toml))
.PHONY: $(PY_LAMBDAS)
install-py-lambdas : $(PY_LAMBDAS)
$(PY_LAMBDAS) :
$(MAKE) -C $@ requirements.txt
requirements.txt : poetry.lock
$(POETRY) export --without-hashes --format=requirements.txt > requirements.txt
# Ignore for now
# poetry.lock : pyproject.toml
# $(POETRY) install
# pyproject.toml : | $(VENV)/bin/python
# $(PY8) -m venv $(VENV)
如果 lambda 目录中有一个 requirements.txt 文件,它会显示 Nothing to be done for \'requirements.txt\',这似乎很好。如果没有requirements.txt 文件,则会出错:No rule to make target \'requirements.txt\'. Stop. 我现在正在测试,poetry.lock 文件已经存在于所有目录中。
我最好的猜测是,规则在子目录中运行的事实导致某种找不到目标和规则的失败,我不知道。我需要在子目录中运行规则,因为诗歌从当前目录读取其环境,并且没有任何类型的“目标目录”选项。
我希望这是我的一个相对简单的错误!我的基本问题的任何替代解决方案都将受到欢迎。
标签: gnu-make