2.5. make를 사용하여 더 많은 코드 관리


GNU make 유틸리티(일반적으로 축약된 make )는 소스 파일에서 실행 파일의 생성을 제어하기 위한 툴입니다. 복잡한 프로그램의 어떤 부분이 변경되어 다시 컴파일해야 하는지 자동으로 결정합니다. make 는 Makefiles라는 구성 파일을 사용하여 프로그램 빌드 방식을 제어합니다.

2.5.1. GNU make 및 Makefile 개요

특정 프로젝트의 소스 파일에서 사용 가능한 양식(일반적으로 실행 파일)을 생성하려면 몇 가지 필요한 단계를 수행합니다. 나중에 반복할 수 있도록 동작 및 시퀀스를 기록합니다.

Red Hat Enterprise Linux에는 이러한 목적을 위해 설계된 빌드 시스템인 GNU make 가 포함되어 있습니다.

GNU make이란 무엇입니까?
GNU make 는 빌드 프로세스를 설명하는 지침이 포함된 Makefiles를 읽습니다. Makefile에는 특정 작업(시피)을 사용하여 특정 조건(대상)을 충족하는 방법을 설명하는 여러 규칙이 포함되어있습니다. 규칙은 다른 규칙에 따라 계층적으로 달라질 수 있습니다.

옵션 없이 make 를 실행하면 현재 디렉터리에서 Makefile을 찾아 기본 대상에 연결을 시도합니다. 실제 Makefile 파일 이름은 Makefile,makefileGNUmakefile 중 하나일 수 있습니다. 기본 대상은 Makefile 콘텐츠에서 결정됩니다.

특정 대상을 사용하여 make 를 실행하려면 다음을 수행합니다.

$ make target
Makefile 구조 및 구문
makefiles는 타겟레시피 로 구성된 변수규칙을 정의하는 데 비교적 간단한 구문을 사용합니다. 대상은 규칙이 실행되는 경우 출력을 지정합니다. 레시피가 있는 줄은 TAB 문자로 시작해야 합니다.

일반적으로 Makefile에는 소스 파일을 컴파일하는 규칙, 결과 개체 파일을 연결하는 규칙 및 계층 구조의 맨 위에 있는 진입점 역할을 하는 대상이 포함됩니다.

기본 Makefile 예
단일 파일 hello.c 로 구성된 C 프로그램을 빌드하려면 다음 Makefile 을 고려하십시오.
all: hello

hello: hello.o
        gcc hello.o -o hello

hello.o: hello.c
        gcc -c hello.c -o hello.o

이 예제에서는 모든 대상에 도달하는 데 파일 hello 가 필요함을 보여줍니다. hello를 얻으려면 hello.o ( gcc로 링크됨)가 필요하며 hello.c 에서 생성됩니다( gcc로 컴파일됨).

대상은 마침표(.)로 시작하지 않는 첫 번째 대상이므로 all 은 기본 대상입니다. 인수 없이 make 를 실행하면 현재 디렉터리에 이 Makefile 이 포함된 경우 모든 실행과 동일합니다.

변수가 포함된 고급 Makefile
일반적인 Makefile은 단계를 일반화하기 위해 변수를 사용하고 대상 "clean"을 추가합니다 - 소스 파일을 제외한 모든 항목을 제거합니다.
CC=gcc
CFLAGS=-c -Wall
SOURCE=hello.c
OBJ=$(SOURCE:.c=.o)
EXE=hello

all: $(SOURCE) $(EXE)

$(EXE): $(OBJ)
        $(CC) $(OBJ) -o $@

%.o: %.c
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -rf $(OBJ) $(EXE)

이러한 Makefile에 소스 파일을 더 추가하려면 SOURCE 변수가 정의된 행에만 추가해야 합니다.

2.5.2. 예: Makefile을 사용하여 C 프로그램 빌드

이 예제의 단계에 따라 Makefile을 사용하여 샘플 C 프로그램을 빌드합니다.

프로세스

  1. hellomake 디렉토리를 생성합니다.

    $ mkdir hellomake
  2. 생성된 디렉터리로 변경합니다.

    $ cd hellomake
  3. 다음 콘텐츠를 사용하여 hello.c 파일을 생성합니다.

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
      printf("Hello, World!\n");
      return 0;
    }
  4. 다음 콘텐츠를 사용하여 Makefile 파일을 생성합니다.

    CC=gcc
    CFLAGS=-c -Wall
    SOURCE=hello.c
    OBJ=$(SOURCE:.c=.o)
    EXE=hello
    
    all: $(SOURCE) $(EXE)
    
    $(EXE): $(OBJ)
            $(CC) $(OBJ) -o $@
    
    %.o: %.c
            $(CC) $(CFLAGS) $< -o $@
    
    clean:
            rm -rf $(OBJ) $(EXE)
    중요

    Makefile 레시피 라인은 탭 문자로 시작해야 합니다! 위의 텍스트를 문서에서 복사할 때 cut-and-paste 프로세스가 탭 대신 공백을 붙여넣을 수 있습니다. 이 경우 문제를 수동으로 수정합니다.

  5. 실행 make:

    $ make
    gcc -c -Wall hello.c -o hello.o
    gcc hello.o -o hello

    그러면 실행 파일 hello 가 생성됩니다.

  6. 실행 파일 hello 를 실행합니다.

    $ ./hello
    Hello, World!
  7. 생성된 파일을 제거하려면 Makefile target clean 을 실행합니다.

    $ make clean
    rm -rf hello.o hello

2.5.3. 작성을 위한 문서 리소스

make 에 대한 자세한 내용은 아래 나열된 리소스를 참조하십시오.

설치된 문서
  • 시스템에 설치된 도움말 페이지를 보려면 man 유틸리티를 사용합니다.
$ man make
  • info 유틸리티를 사용하여 시스템에 설치된 정보 페이지를 확인합니다.

    $ info make
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동