나는 이렇게 학습한다/Etc

Makefile로 나만의 명령어를 만들어보자! (간단 사용법과 예시)

daco2020 2022. 9. 10. 00:05

Makefile 왜 써야 해?

 

개발 환경(dev, stage, qa, production 등)에 따라 실행해야 할 스크립트가 다를 수 있다.

 

이런 경우 각각의 명령어와 스크립트 이름을 외우지 않으면 적합한 스크립트를 찾아 실행하기가 어렵다. 개발에 집중할 시간도 부족한데 명령어 메모를 이리저리 검색하는 것은 시간낭비처럼 느껴질 것이다.

 

Makefile을 이용하면 이런 문제를 쉽게 해결할 수 있다. Makefile은 ‘make [target이름]’ 라는 간단한 명령어만으로 미리 세팅해둔 스크립트들을 실행할 수 있도록 도와준다.

 

 

이번 글에서는 누구나 쉽게 따라 할 수 있는 Makefile 간단 사용법을 설명하겠다.

 

 

 

 

 

 

사용법

 

적용하고 싶은 디렉터리로 이동해 터미널 shell 에서 touch 명령어로 Makefile을 생성한다. (코드에디터로 생성해도 상관없다)

$ touch Makefile  # touch는 파일을 생성하는 명령어이다.

 

 

 

코드에디터 혹은 vim을 사용하여 Makefile 파일 내에 'test' 라는 [target이름]을 입력한다. 그리고 target이 수행할 명령어를 입력한다.

# Makefile

test: # 여기에 작성한 'test'는 target 이름을 의미하며 끝에 ':' 을 붙인다.
    echo 오히려 좋아. # echo는 문자열을 컴퓨터 터미널에 출력하는 명령어이다.

 

 

 

이제 다시 터미널로 돌아와 shell 에서 make test 명령을 입력해보자!

$ make test
>>> echo 오히려 좋아.
>>> 오히려 좋아.

 

 

Makefile에 설정해둔 echo 명령이 잘 수행한 것을 볼 수 있다!

 

 

 

 

 

응용

 

Makefile의 동작원리를 알았으니 이제 docker-compose 같은 스크립트도 단어 하나만으로 실행시킬 수 있다. 뿐만 아니라 함께 수행해야 하는 각종 명령어와 스크립트들을 하나의 묶음으로 사용할 수도 있다. 아래는 예시다.

# Makefile


# test 실행 target 예시
test:
    echo 테스트를 실행합니다.
    pytest
    echo 테스트를 종료합니다.

test-cov: 
    echo 테스트 커버리지를 실행합니다.
    pytest --cov
    echo 테스트 커버리지를 종료합니다.


# dev 환경 target 예시
dev-up:
    docker-compose -f docker-compose.dev.yml up

dev-down:
    docker-compose -f docker-compose.dev.yml down

 

 

 

 

나의 경우 git commit과 push, pull을 하나의 명령어로 처리할 때 사용하기도 한다.

# Makefile

tistory-upload:
    git add .
    git commit -m "upload"
    git push origin main
    sleep 60  # 60초 대기 명령어
    git pull origin main #  다시 pull을 받는 이유는 원격 저장소 actions가 파일을 변경하기 때문이다.

 

 

만약 명령어들이 너무 많아 복잡해진다면, 명령어들을 따로 sh 스크립트에 적어둔다음 해당 스크립트를 Makefile에 기재하는 방법도 있다.

 

 

 

 

 

마치며

이 글에서 설명한 것과 같이 Makefile은 복잡한 명령어들을 하나의 명령어로 모아줄 수 있다. (객체지향의 ‘추상화’와 유사) 명령어들을 Makefile로 단순화함으로써 우리는 명령어를 암기할 필요없이 하고 싶은 개발에 집중할 수 있다.

 

Makefile은 내가 설명한 것 이상으로 다양하게 활용할 수 있다. 더 자세한 사용법이 궁금하다면 아래 레퍼런스를 참고하기 바란다.

 

 

 


 

 

레퍼런스

 

GNU make

 

www.gnu.org

 

[Make 튜토리얼] Makefile 예제와 작성 방법 및 기본 패턴 - ECE - TUWLAB

리눅스 환경에서 소스코드를 다운받아서 수동으로 프로그램 설치를 해 보신 분들은 다음 세 줄의 명령어에 매우 익숙할 것입니다. ./configure make sudo make install 근래에는 make 외에 다른 빌드툴들이

www.tuwlab.com

 

Makefile 이 도대체 뭘까?

다음은 Makefile과 관련하여 linux manual에 나와 있는 내용이다. make - GNU make utility to maintain groups of programs The purpose of the make utility is to determine au

velog.io