GNU Make를 가볍게 시도해보기

2 min

language: ja bn de en es fr hi ko 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