У меня есть make-файл, где у меня есть цели, которые зависят от наличия установленных внешних клиентов (python3, libxml2 и т. Д.).
Вот мой make-файл
.PHONY: test install-packages mac-setup checkenv target help
EXTERNALS = python3 pip3 xmllint pytest pipenv
P := $(foreach exec,$(EXTERNALS),$(if $(shell which $(exec)),missing,$(warning "===>>>WARNING: No required `$(exec)` in PATH, run `make mac-setup` + `make install-packages` <<<===")))
test: ## run all tests in test directory
pipenv run pytest -v --ignore=path payload_files .
install-packages: ##install python packages listed in Pipfile
pipenv install
mac-setup: ## setup mac for testing
brew install libxml2
brew install python3
brew install pipenv
# see https://github.mycompany.com/ea/ea_test_player_unified/blob/master/run-feature.sh
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.DEFAULT_GOAL := help
Обратите внимание на строку
P := $(foreach exec,$(EXTERNALS),$(if $(shell which $(exec)),missing,$(warning "===>>>WARNING: No required `$(exec)` in PATH, run `make mac-setup` + `make install-packages` <<<===")))
Эта проверка необходимых двоичных файлов.Это работает .... однако я предпочел бы иметь цель checkenv
, которая выполняет это, и ошибки, чтобы я мог прикрепить ее к слишком конкретным целям, таким как test
, вместо распечатки ПРЕДУПРЕЖДЕНИЯ, которое может быть пропущено.
Хотите:
checkenv: # error if which ${binary} fails or *even better* if if binary --version doesn't return the right version: python3 pip3 xmllint pytest pipenv
Я пробовал различные методы, которые я нашел в Интернете, включая stackoverflow .... но большинство используют технику, которую я использую выше, которые не используют make target или просто проверяют один двоичный файл,Я пытался создать цикл через массив двоичных файлов, но просто не смог получить правильный синтаксис, потому что он был PITA:)
Есть предложения?
Примечание. Я новичок в Python,задача состоит в том, чтобы переписать некоторые тесты jmeter в python .... поэтому, если у вас есть какие-либо мысли по поводу вышеупомянутого подхода, не стесняйтесь поделиться.
Спасибо, Фил