Почему не работает makefile и как это исправить?

есть такой 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

переименовал переменную пути к файлу, но это не помогло Я понятия не имею, как это исправить

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему не работает 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.

Другие вопросы по теме