목차
make
는 소프트웨어 개발을 위해 유닉스 계열 운영체제에서 사용되는 프로그램 빌드 도구이다.
Makefile
은 프로그램을 빌드하기 위해 make
문법에 맞춰 작성하는 문서이다.
출처 : 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) 형태로 존재한다. 미리 컴파일 되어있기 때문에 전체 컴파일 시간이 단축된다.
라이브러리를 언제 포함시키는 지에 따라 동적 라이브러리와 정적 라이브러리로 구분할 수 있다.