| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
Tags
- 시스템관리
- js
- linuxcommand
- coreutils
- JavaScript
- terminal
- 유닉스명령어
- 쉘스크립트
- 명령어
- UNIX
- Solaris
- linux
- 사용자관리
- 자바스크립트
- 유닉스
- 터미널
- 리눅스명령어
- PackageManagement
- Unix명령어
- 정규표현식
- UnixCommand
- 파일시스템
- php
- 리눅스
- environment
- cups
- shell
- bash
- tcsh
- sysadmin
Archives
- Today
- Total
ioerror
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) 선언이 권장됨.
반응형
'OS' 카테고리의 다른 글
| manpath - 매뉴얼 페이지 탐색 경로 확인 및 설정 (0) | 2026.06.01 |
|---|---|
| man - 온라인 매뉴얼 페이지 참조 (0) | 2026.06.01 |
| mail - 메일 송수신 및 관리 명령어 (1) | 2026.06.01 |
| lpstat - 프린터 큐 및 서비스의 현재 상태 확인 명령어 (0) | 2026.05.22 |
| lprm - 프린터 큐에 대기 중인 인쇄 작업을 삭제하는 명령어 (0) | 2026.05.22 |
Comments