есть такой make-файл
define HELPBODY
Available commands:
make help - this thing.
make init - install python dependancies
make test - run tests and coverage
make pylint - code analysis
make build - pylint + test
make docs - generate html docs using sphinx
make dist - build source distribution
mage register - register in pypi
make upload - upload to pypi
make pb_fetch - fetch protobufs from SteamRE
make pb_compile - compile with protoc
make pb_clear - removes *.proto
make pb_update - pb_fetch + pb_compile
endef
export HELPBODY
help:
@echo "$$HELPBODY"
init:
pip install -r requirements.txt
test:
coverage erase
PYTHONHASHSEED=0 nosetests --verbosity 1 --with-coverage --cover-package=dota2
pylint:
pylint -r n -f colorized dota2 || true
build: pylint test docs
.FORCE:
docs: .FORCE
$(MAKE) -C docs html
clean:
rm -rf dist dota2.egg-info dota2/*.pyc
dist: clean
python setup.py sdist
register:
python setup.py register -r pypi
upload: dist register
twine upload -r pypi dist/*
pb_fetch:
wget -nv --backups=1 --show-progress -P ./protobufs/ -i protobuf_list.txt
rm -f ./protobufs/*.1
sed -i '1s/^/syntax = "proto2"\;\npackage dota\;\n/' protobufs/*.proto
sed -i 's/\(optional\|repeated\) \.\([A-Z]\)/\1 dota.\2/' protobufs/*.proto
sed -i 's/cc_generic_services/py_generic_services/' protobufs/*.proto
sed -i 's/ = 6000/ = 7000/' protobufs/steammessages.proto # extentions hack
pb_compile:
for filepath in `ls ./protobufs/*.proto`; do \
protoc3 --python_out ./dota2/protobufs/ --proto_path=./protobufs "$$filepath"; \
done;
sed -i '/^import sys/! s/^import /import dota2.protobufs./' dota2/protobufs/*_pb2.py
pb_clear:
rm -f ./protobufs/*.proto ./dota2/protobufs/*_pb2.py
gen_enums:
python gen_enum_from_protos.py > dota2/proto_enums.py
pb_update: pb_fetch pb_compile gen_enums
при вводе make pb_compile выдает эту ошибку
MAKE Version 5.43 Copyright (c) 1987, 2019 Embarcadero Technologies, Inc.
Error makefile 2: Command syntax error
Error makefile 22: Command syntax error
Error makefile 24: Command syntax error
Error makefile 40: Colon expected
*** 4 errors during make ***
Убрал все лишнее и все получилось
pb_compile:
for filepath in `ls ./protobufs/*.proto`; do \
protoc3 --python_out ./dota2/protobufs/ --proto_path=./protobufs "$$filepath"; \
done;
sed -i '/^import sys/! s/^import /import dota2.protobufs./' dota2/protobufs/*_pb2.py
теперь ошибка
MAKE Version 5.43 Copyright (c) 1987, 2019 Embarcadero Technologies, Inc.
for filepath in `ls ./protobufs/*.proto`; do protoc3 --python_out ./dota2/protobufs/ --proto_path=./protobufs "$filepath"; done;
Unexpected occurrence: filepath.
** error 1 ** deleting pb_compile
переименовал переменную пути к файлу, но это не помогло Я понятия не имею, как это исправить
Почему не работает make-файл
Вы используете make-файл, предназначенный специально для GNU make
, работающего в среде POSIX с оболочкой POSIX, но вы используете Embarcadero make
в среде Windows.
Судя по документации, Embarcadero make
похож на POSIX make
, но не полностью соответствует ему. Более того, похоже, что он не предоставляет никаких расширений GNU make
. Более того, рецепты в make-файле предназначены для выполнения оболочкой POSIX, а не Windows PowerShell или cmd.exe.
и как это исправить?
Кажется, что make-файл, который вы пытаетесь использовать, совершенно не подходит для вашей среды в его нынешнем виде. Простого решения не существует. Основными вариантами являются:
перепишите make-файл с нуля для Embarcadero make
, работающего в вашей среде Windows, ИЛИ
Установите и используйте среду GNU make
и POSIX, например MinGW-w64/MSYS2.