有这样一个makefile
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
重命名了文件路径变量,但这没有帮助 我不知道如何解决这个问题
为什么 makefile 不起作用
您正在使用专门用于在带有 POSIX shell 的 POSIX 环境中运行的 GNU
make
的 makefile,但您在 Windows 环境中使用 Embarcadero make
。
从其文档来看,Embarcadero 的
make
类似于 POSIX make
,但并不完全一致。 此外,它似乎没有提供任何 GNU 的 make
扩展。 此外,makefile 中的配方旨在由 POSIX shell 执行,而不是由 Windows PowerShell 或 cmd.exe 执行。
以及如何修复它?
您尝试使用的 makefile 似乎完全不适合您现在的环境。 没有简单的修复方法。 主要选项似乎是:
为在 Windows 环境中运行的 Embarcadero
make
从头开始重写 makefile,或者
安装并使用GNU
make
和POSIX风格环境,例如MinGW-w64 / MSYS2。