2.4. Make를 사용하여 더 많은 코드 관리
GNU make 유틸리티는 일반적으로 축약된 make 에서 소스 파일에서 실행 파일 생성을 제어하는 도구입니다. 복잡한 프로그램의 어떤 부분이 변경되었으며 다시 컴파일해야 하는지 확인합니다. make 는 Makefiles라는 설정 파일을 사용하여 프로그램이 빌드되는 방식을 제어합니다.
2.4.1. GNU make 및 Makefile 개요 링크 복사링크가 클립보드에 복사되었습니다!
특정 프로젝트의 소스 파일에서 사용 가능한 양식(일반적으로 실행 파일)을 만들려면 몇 가지 필수 단계를 수행합니다. 작업 및 해당 시퀀스를 기록하여 나중에 반복할 수 있습니다.
Red Hat Enterprise Linux에는 이러한 목적을 위해 설계된 빌드 시스템인 GNU make 가 포함되어 있습니다.
사전 요구 사항
- 컴파일 및 연결의 개념 이해
GNU make
GNU make 는 빌드 프로세스를 설명하는 지침이 포함된 Makefiles를 읽습니다. Makefile에는 특정 조건(대상)을 충족하는 방법을 설명하는 특정 작업(메시피)을 설명하는 여러 규칙이 포함되어있습니다. 규칙은 다른 규칙에 따라 계층적으로 달라질 수 있습니다.
옵션 없이 make 를 실행하면 현재 디렉터리에서 Makefile을 찾아 기본 대상에 도달하려고 시도합니다. 실제 Makefile 파일 이름은 Makefile,makefile 및 GNUmakefile 중 하나일 수 있습니다. 기본 대상은 Makefile 콘텐츠에서 결정됩니다.
Makefile 세부 정보
makefiles는 타겟 과 레시피로 구성된 변수 및 규칙을 정의하는 비교적 간단한 구문을 사용합니다. target은 규칙이 실행되는 경우 출력을 지정합니다. 레시피가 포함된 행은 TAB 문자로 시작해야 합니다.
일반적으로 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에 의해 컴파일됨 )에서 생성됩니다.
target all 은 마침표(.)로 시작하지 않는 첫 번째 대상이기 때문에 기본 대상입니다. 인수 없이 make 를 실행하면 현재 디렉터리에 이 Makefile 이 포함된 경우 실행 중인 make 와 같습니다.
일반적인 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.4.2. 예제: Makefile을 사용하여 C 프로그램 빌드 링크 복사링크가 클립보드에 복사되었습니다!
이 예제의 단계에 따라 Makefile을 사용하여 샘플 C 프로그램을 빌드합니다.
사전 요구 사항
절차
hellomake디렉터리를 생성하고 이 디렉터리로 변경합니다.$ mkdir hellomake $ cd hellomake다음 콘텐츠를 사용하여
hello.c파일을 생성합니다.#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }다음 콘텐츠를 사용하여
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 프로세스는 탭 대신 공백을 붙여넣을 수 있습니다. 이 경우 문제를 수동으로 수정합니다.
make: 실행$ make gcc -c -Wall hello.c -o hello.o gcc hello.o -o hello그러면 실행 가능한 파일
hello가 생성됩니다.실행 파일
hello:$ ./hello Hello, World!Makefile target
clean을 실행하여 생성된 파일을 제거합니다.$ make clean rm -rf hello.o hello
2.4.3. Make에 대한 문서 리소스 링크 복사링크가 클립보드에 복사되었습니다!
make 에 대한 자세한 내용은 아래 나열된 리소스를 참조하십시오.
설치된 문서
man및info툴을 사용하여 시스템에 설치된 도움말 페이지와 정보 페이지를 확인합니다.$ man make $ info make
온라인 문서
- Free Software Foundation에서 호스팅하는 GNU Make 설명서