본문 바로가기

Makefile은 빌드 자동화를 위한 강력한 도구이며, gzip 같은 명령을 포함할 때도 유용하게 사용할 수 있습니다. 하지만 명령어 실행 중 오류가 발생하거나, 실행 로그를 깔끔하게 관리해야 할 때 어떻게 처리해야 할까요? 이 글에서는 Makefile에서 @- 옵션을 활용해 gzip 명령을 유연하고 깔끔하게 다루는 방법을 소개합니다.


1. gzip 명령어와 Makefile 기본 구성

아래는 Makefile에서 특정 디렉토리(reportslogs)의 파일을 압축하는 예제입니다:

gzip_step:
    @echo "Running gzip_step..."
    -@\gzip -f reports/*
    -@\gzip -f logs/*

이 간단한 코드로 두 가지 작업을 수행합니다:

  1. reportslogs 디렉토리의 모든 파일을 .gz로 압축.
  2. 작업 상태를 사용자에게 출력.

2. @- 옵션의 역할

2.1 @: 출력 억제

Makefile은 기본적으로 실행 중인 모든 명령어를 터미널에 출력합니다. 하지만 명령 자체를 숨기고 결과만 표시하고 싶다면 명령어 앞에 @를 붙입니다.

  • 예:출력 결과:
  • Running gzip_step...
  • @echo "Running gzip_step..."
  • @를 사용하지 않으면 출력 결과는 아래와 같습니다:
  • echo "Running gzip_step..." Running gzip_step...

2.2 -: 오류 무시

-를 명령어 앞에 붙이면 해당 명령 실행 중 오류가 발생하더라도 Make가 빌드를 중단하지 않습니다.

  • 예:
    • 파일이 없거나 디렉토리가 비어 있어도 Makefile은 다음 명령을 계속 실행합니다.
    • 출력 예시(비어 있는 디렉토리):
      gzip: reports/*: No such file or directory
  • -@\gzip -f reports/*
  • 왜 중요한가?
    • 빌드 중 특정 디렉토리에 파일이 없더라도 전체 프로세스를 중단하지 않기 위해 사용됩니다.

3. 실행 흐름과 결과

이 Makefile은 다음과 같은 흐름으로 실행됩니다:

  1. "Running gzip_step..."라는 메시지가 출력됩니다.
  2. reports/ 디렉토리의 파일이 압축됩니다. 파일이 없으면 오류를 무시하고 계속 진행합니다.
  3. logs/ 디렉토리의 파일이 압축됩니다. 이 역시 파일이 없더라도 오류를 무시합니다.

4. 개선 아이디어

4.1 빈 디렉토리 검사를 추가하기

현재 코드에서는 파일이 없는 디렉토리도 gzip 명령이 실행되어 오류 메시지가 출력됩니다. 이를 방지하려면 디렉토리 내 파일이 있는지 확인한 후 gzip을 실행하도록 수정할 수 있습니다.

  • 수정된 코드:
  • gzip_step: @echo "Running gzip_step..." -@[ -n "$(wildcard reports/*)" ] && gzip -f reports/* || echo "No files to compress in reports/" -@[ -n "$(wildcard logs/*)" ] && gzip -f logs/* || echo "No files to compress in logs/"
  • 주요 변경 사항:
    • $(wildcard reports/*)로 디렉토리 내 파일 여부를 확인.
    • 파일이 없으면 오류 대신 "No files to compress" 메시지를 출력.

4.2 압축 결과를 로그로 저장하기

압축 작업의 결과를 로그 파일에 기록할 수도 있습니다.

  • 수정된 코드:
  • gzip_step: @echo "Running gzip_step..." -@\gzip -f reports/* && echo "Compressed files in reports/" >> gzip.log -@\gzip -f logs/* && echo "Compressed files in logs/" >> gzip.log
  • 주요 변경 사항:
    • 압축 성공 시 로그 파일(gzip.log)에 기록.

5. 결론

Makefile에서 gzip 명령을 다룰 때 @- 옵션은 필수적인 도구입니다.

  • @: 명령 출력 억제를 통해 더 깔끔한 로그를 제공합니다.
  • -: 오류 무시를 통해 빌드 프로세스가 중단되지 않도록 합니다.

여기에 디렉토리 검사나 로그 기록 같은 기능을 추가하면 더 견고하고 사용자 친화적인 Makefile을 작성할 수 있습니다. 이를 프로젝트에 적용하여 효율적인 빌드 환경을 구축해 보세요!

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.