목차

make와 Makefile

make란?

make 는 소프트웨어 개발을 위해 유닉스 계열 운영체제에서 사용되는 프로그램 빌드 도구이다.

Makefile이란?

Makefile 은 프로그램을 빌드하기 위해 make 문법에 맞춰 작성하는 문서이다.

빌드 예제

출처 : https://www.tuwlab.com/27193

출처 : https://www.tuwlab.com/27193

세 개의 소스 파일(main.c, foo.c, bar.c)를 각각 컴파일해서 Object 파일(*.o)을 생성하고, 생성한 Object 파일을 하나로 묶는 링크 과정을 통해 실행 파일인 app.out 을 생성한다. 여기서 foo와 bar에 정의된 함수를 main에서 호출하는 의존성이 존재한다.

make를 사용하지 않고 빌드를 한다면 다음과 같은 명령어를 수행하면 된다.

# 오브젝트 파일 생성
gcc -c main.c foo.c bar.c

# 실행 파일 생성
gcc -o app.out main.o foo.o bar.o

하지만, 소스 파일이 많아지고 복잡해지면 위와 같이 사용하는 것이 어려워진다. 이에 대한 대안으로 쉘 스크립트에 빌드 명령을 작성할 수도 있지만, Makefile 이 제공하는 Incremental build 를 사용할 수 없게 된다.

Incremental build 란 반복적인 빌드 과정에서 변경된 소스코드에 의존성(Dependency)이 있는 대상들만 추려서 다시 빌드하는 기능이다.

Makefile 에서 빌드 대상(Target)별로 의존성을 명시하면 자동으로 Incremental build 를 수행하므로 매우 편리하다.

라이브러리

라이브러리란?

다른 프로그램들과 링크되기 위해 존재하는 하나 이상의 서브루틴이나 함수들의 집합 파일을 의미한다.

링크가 될 수 있도록 컴파일된 형태인 오브젝트 파일(*.o) 형태로 존재한다. 미리 컴파일 되어있기 때문에 전체 컴파일 시간이 단축된다.

라이브러리를 언제 포함시키는 지에 따라 동적 라이브러리와 정적 라이브러리로 구분할 수 있다.