본문 바로가기
Computer Science/리눅스

GNU make

by Bloofer 2020. 9. 4.

GNU make는 기본적으로 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일되어야 하는지를 자동적으로 판단해서 필요한 커맨드를 실행한다. GNU make에 그 프로그램의 타겟과 의존성들을 알려주는 것이 Makefile이다. Makefile의 기본적인 구조는 아래와 같다.

 

< Makefile의 기본 구조 >

타겟은 말 그대로 명령이 수행되어 얻을 결과 파일이고 의존성은 타겟이 의존하고 있는, 즉 타겟이 컴파일되기 위해 필요한 파일들을 의미한다.

  • 참고로 타겟에는 결과 파일만 올 수 있는 것뿐 아니라 clean과 같은 레이블도 올 수 있다.
  • 명령 부분은 앞에 반드시 TAB으로 구분한다. make는 명령어를 앞단에서 TAB으로 구분하기 때문이다.
    • 나의 경우처럼 TAB 기본 설정이 nvim.init 에디터 설정에서 다르게 적용된 경우, 이를 끄고 Makefile을 작성해야 make가 제대로 된다.

< 오캐믈 프로그램 Makefile 예제 >

기본적으로 타겟은 만들어 낼 결과 프로그램을 의미하지만 all, clean과 같은 레이블은 지정되어 있는 의미가 있다.

  • all : 전체 프로그램을 컴파일한다. 기본 타겟이 되어야하는 레이블이다.
  • install : 프로그램을 컴파일하고 실행가능한 파일들, 라이브러리들, 그리고 실제로 사용되는 파일들 등을 복사한다.
  • clean : 현재 디렉토리 내에 프로그램이 빌드되었을 때 생성된 모든 파일을 삭제한다.

출처 : GNU make 매뉴얼