GNU Make를 가볍게 시도해보기
안녕하세요, 무능입니다.
제가 만들고 있는 것 중에 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에 정리해 두면 어떤 것을 실행할 수 있는지 확인하기 쉬워서 좋다고 생각합니다만, 작은 작업만 하는 경우에는 필요 없겠죠.
그럼 다음에 또 뵙겠습니다. 잘 부탁드립니다.