(미완성)평범한 개발자의 C 프로그래밍 이야기

make 시작

2장에서는 주로 gnu make를 사용하는 방법을 알아보겠습니다. 현재는 make라는 빌드 툴이 가장 많이 사용되는것 같습니다. 윈도우에서도 make와 유사한 툴이 있고 많이 사용되고 있고, 유닉스에서는 절대적으로 대다수가 사용하고 있습니다. 몇몇 회사들이 유사한 툴들을 제공하고 있지만 기본은 make와 동일합니다. make가 널리 사용되고 있긴 하지만 많은 단점들이 있습니다. 제가 생각하는 가장 큰 단점은 직관적이지 못한 사용법입니다. make는 Makefile이라는 설정 파일을 만들어서 실행 방식을 지정하는데 Makefile을 작성하기가 매우 어렵습니다. 금방 익숙해질 수는 있지만, 정말 이상한 형식으로 작성해야합니다. 최근에 좀더 쉽고 편리한 툴들이 나오고있지만 아직은 널리 사용되는 툴이 없어서 아쉽습니다.

make를 사용하기 위해서는 먼저 autoconf라는 툴을 사용할 수 있어야 합니다. Makefile의 작성법이 워낙 복잡하다보니 autoconf, automake 등 쉽게 Makefile을 생성할 수 있도록 도와주는 툴들이 출시되었습니다. 하지만 저는 오히려 이런 툴들을 다 활용하기 위해 배우고 익히는 일이 그냥 Makefile 작성법을 익히는 시간보다 더 오래 걸리고 노력도 더 필요하다고 생각합니다. 그래서 이 책에서는 autoconf를 이용한 configure 작성과 configure의 결과물을 이용한 Makefile 작성만을 다루겠습니다. Makefile은 몇몇 설정은 configure의 결과 파일을 이용하지만 대부분 손으로 직접 작성하겠습니다.

먼저 해야할 일은 디렉토리 구조를 결정하는 것입니다. 제품의 특성에 따라 디렉토리 구조가 달라질 수 있습니다. 가장 먼저 필요한 디렉토리는 소스가 저장될 src 디렉토리입니다. 그리고 헤더파일이 저장될 include 파일과 빌드가 완료되면 생성될 라이브러리 파일이 저장될 lib가 있습니다. 그리고 유닛테스트용 소스 파일들이 저장될 test 디렉토리가 필요합니다. 요약해보면 다음과 같은 디렉토리 구조가 됩니다.

- calib
  - include
  - lib
  - src
  - test


각 디렉토리마다 Makefile이 존재하고, 가장 상위 디렉토리 calib에 configure 파일이 존재합니다. 빌드는 calib/configure 파일을 실행한 후, calib 에서 make를 실행하는 순서로 실행됩니다. lib 디렉토리에 최종 생성 파일인 libcalib.a가 생성되면 빌드가 완료된 것입니다. 빌드가 완료된 후 libcalib.a의 기능들을 테스트하는 유닛테스트가 빌드되고 실행됩니다. 요약하면 다음과 같은 순서가 됩니다.

1. configure 실행
2. make 실행
3. src/에 있는 소스가 컴파일됨
4. lib/에 libcalib.a 파일이 생성됨
5. test/에 있는 소스가 컴파일됨
6. test/에 있는 테스트 실행 파일들이 실행됨
7. 유닛테스트 완료

빌드 환경을 준비할 때도 이와같은 순서로 실행되도록 약간의 예제 소스를 만들어서 빌드를 확인하겠습니다. 빌드 환경 준비가 끝나면 그때부터 본격적인 프로그램 작성을 시작합니다.

댓글

댓글 본문
작성자
비밀번호
graphittie 자세히 보기