为什么 makefile 不起作用以及如何修复它?

问题描述 投票:0回答:1

有这样一个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

重命名了文件路径变量,但这没有帮助 我不知道如何解决这个问题

python windows makefile
1个回答
0
投票

为什么 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。

© www.soinside.com 2019 - 2024. All rights reserved.