ioerror

make - 지정된 규칙에 따라 프로그램을 자동으로 빌드하고 관리하는 도구 본문

OS

make - 지정된 규칙에 따라 프로그램을 자동으로 빌드하고 관리하는 도구

반응형

make

make - GNU make (Utility for Directing Compilation)

파일 간의 종속 관계를 파악하여 변경된 파일만 프로젝트 전체에서 자동으로 컴파일하고 링크하는 빌드 자동화 도구이다. 주로 C/C++ 프로젝트 빌드에 사용되나, 반복적인 파일 처리 작업에도 광범위하게 활용된다.

1. 명령어 용도

  • 대규모 프로젝트에서 소스 코드가 변경되었을 때, 변경된 부분과 연관된 파일만 선별적으로 재컴파일하여 빌드 시간을 단축함.
  • Makefile에 기술된 타겟 규칙에 따라 복잡한 컴파일 명령어를 단순화함.

[실무 활용 예시]

  • 오픈소스 프로그램 컴파일 및 설치
  • 소스 코드를 다운로드한 후 구성(configure) 단계를 거쳐 빌드하고 시스템에 설치할 때 주로 사용된다.
  • 다중 코어 병렬 빌드
  • 대형 프로젝트 빌드 시 CPU 코어를 모두 활용하여 빌드 속도를 극대화하는 용도로 소스코드 저장소(GitHub 등)의 CI/CD 스크립트에서 자주 활용된다.

2. 명령어 서식

make [옵션] [타겟]

3. 명령어 옵션

옵션 설명 사용가능 OS 및 쉘
-j [N] 지정한 N개의 작업(Job)을 동시에 실행 (병렬 컴파일)  
-f [파일] Makefile 대신 지정한 파일을 설정 파일로 사용  
-C [디렉토리] 명령을 실행하기 전에 지정한 디렉토리로 이동  
-n 명령어를 실제로 실행하지 않고, 실행될 명령어만 화면에 출력 (드라이 런)  
-k 에러가 발생해도 중단하지 않고 독립적인 다른 타겟의 빌드를 계속 진행  
-s 실행되는 명령어를 화면에 출력하지 않음 (조용한 모드)  
-v make의 버전 정보를 표시 GNU make

[명령어 옵션 사용 예시]

# 1. 4개의 프로세스를 동시에 사용하여 빌드 속도 향상
make -j4
# (출력: 병렬로 컴파일러가 호출되며 오브젝트 파일들이 생성됨)

# 2. 실제로 실행하지 않고 수행될 컴파일 명령어 미리 보기
make -n
# gcc -Wall -O2 -c main.c
# gcc -Wall -O2 -c utils.c
# gcc -o my_program main.o utils.o

# 3. 다른 디렉토리에 있는 Makefile을 지정하여 빌드 수행
make -C /home/user/project -f CustomMakefile
# make: Entering directory '/home/user/project'
# ... 빌드 과정 수행 ...
# make: Leaving directory '/home/user/project'

4. 명령어 특이사항(유의사항)

  • Makefile을 작성할 때 명령어가 들어가는 라인의 시작은 반드시 탭(Tab) 문자여야 하며, 공백(Space)으로 대체할 경우 makefile: missing separator 에러가 발생함.
  • 파일의 수정 시간(Timestamp)을 기준으로 빌드 여부를 판단하므로, 시스템 시간이 잘못되어 있으면 변경된 소스 코드가 반영되지 않거나 불필요한 전체 컴파일이 발생할 수 있음.
  • 파일 이름이 clean과 같은 타겟 이름과 동일할 경우 혼선이 생길 수 있으므로, 실제 파일이 아님을 명시하기 위해 .PHONY: clean과 같은 가짜 타겟(Phony Target) 선언이 권장됨.

 

반응형
Comments