Простая попытка использования GNU Make

3 min

language: ja bn en es hi pt ru zh-cn zh-tw

Привет, это Муноу.
Среди того, что я делаю, есть cuckooget, и поскольку я добавил поддержку установки через pip, и мне было лень каждый раз выполнять процесс установки на этапе разработки, я решил попробовать GNU Make.
Дело в том, что у меня была книга O'Reilly по GNU Make, и я читал ее, но она была основана на C/C++, поэтому я думал, что у меня не будет возможности ее применить, но на этот раз мне показалось, что это будет хорошей идеей, поэтому я попробовал.

Makefile

Получилось вот так.

$ cat Makefile 
.PHONY: all check-deps build install clean done

WHEEL_DIR = lib/target/wheels
EGG_INFO  = cuckooget.egg-info src/cuckooget.egg-info

all: check-deps build

check-deps:
        @command -v pyenv >/dev/null || (echo "Please install pyenv" ; exit 1;)
        @command -v python3 >/dev/null || (echo "Please install Python3" ; exit 1;)
        @command -v maturin >/dev/null || ( echo "Please install maturin (pip install maturin)"; exit 1; )

build:
        @echo "Building with maturin..."
        cd lib && maturin build

install:
        pip install . --force-reinstall
        pip install $(WHEEL_DIR)/*.whl --force-reinstall
        @echo "Done! How to use \`ck -h\`"

clean:
        rm -rf build lib/target $(EGG_INFO)

done:
        @echo "All steps completed."

Rust собирается отдельно, чтобы его можно было вызывать как библиотеку Python, но make выполняет только сборку этого Rust-кода.
Благодаря добавлению make clean, я теперь могу мгновенно удалять мусор, и это довольно удобно.

Что еще?

Позже, я думаю, было бы неплохо внедрить это и в другие проекты, но если вы возитесь с одним проектом, то, собрав все в Makefile, легко проверить, что можно выполнить, так что это хорошо, но если вы делаете только мелочи, то это не нужно.

До новых встреч. Всего наилучшего.

Related Posts