본문 바로가기

Build/Make

03. make 유틸리티 사용

make 
 
    -C dir
         Makefile을 계속 읽지 말고 우선은 dir로 이동하라는 것이다. Recursive make에 사용된다.
         $(MAKE) -C /DATA/Test $@  ===> cd /DATA/Test && $(MAKE) $@ 과 같다.
 
    -n 
        빌드 명령을 실제로 수행하지는 않고, 그냥 명령문들을 출력하기만 한다.
 
    -d
        Makefile을 수행하면서 각종 정보를 모조리 출력해 준다.
        결과를 파일로 저장해서 읽어보면 make 의 동작을 대충 이해할 수 있다.
 
    -f file
        file 에 해당하는 파일을 Makefile로써 취급한다. (-file)
 
    -r
        내장하고 있는 각종 규칙(Suffix rule 등)을 없는 것으로 (-no-builtin-rules)간주한다. 
        따라서 사용자가 규칙을 새롭게 정의해 주어야     한다.
 
    -t
        파일의 생성 날짜를 현재 시간으로 갱신한다. (-touch)
 
    -v
        make의 버전을 출력한다. (전 GNU make 3.73 을 씁니다.) (-version)
 
    -p
        make에서 내부적으로 세팅되어 있는 값들을 출력한다. (-print-data-base)
 
    -k
        make는 에러가 발생하면 도중에 실행을 포기하게 되는데 (-keep-going)
        -k 는 에러가 나더라도 멈추지 말고 계속 진행하라는 뜻
 
 

Job Slot
 
 `-j' 또는 `--jobs' 옵션은 make 에게 많은 명령들을 동시에 실행하도록 한다.
 
( MS-DOS에서 `-j' 옵션은 효과가 없다. 왜냐면 그 시스템은 멀티-프로세싱을 지원하지 않기 때문이다. )
 
`-j' 옵션 뒤에 정수가 붙으면 이것은 한 번에 수행할 Recipe 들의 개수를 말한다.
 
이것은 작업 슬롯(job slots) 의 개수라고 한다. 
 
`-j' 옵션 뒤에 정수로 보이는 것이 없다면 작업 슬롯의 개수에 제한이 없어진다.
 
`-j' 옵션이 없는 경우 작업 슬롯의 디폴트 개수는 1이며 이는 순차적인 실행(한번에 하나씩)을 의미한다.
 
 

make 로 makefile 을 실행
 
  • 디폴트로 make는 첫번째 target  (이름이 `.'으로 시작하지 않는 target) 으로 시작한다.
        이것을 default goal 이라고 부르며 위 예제의 edit 를 업데이트 하는 것에 해당한다.
        그래서 우리는 그 규칙을 맨 처음에 놓았던 것이다.
        즉 make 명령을 실행시 현재 디렉토리에서 makefile을 읽고 첫번째 target 을 처리하기 시작한다:
 
  • 예제에서 이 규칙은 `edit'를 다시 링크하는 것이다.
        그러나 make가 이 규칙을 완전히 처리할 수 있기 전에,
        `edit' 가 Dependency 가 있는 파일들에 대한 규칙들을 반드시 먼저 처리해야 한다.
         위 예제에서는 이 Dependency 들이 오브젝트 파일들이다.
 
  • 오브젝트 파일들 각각은 그 자신의 규칙에 따라서 처리된다.
        (`.o'파일을 그의 소스 파일을 컴파일해서 업데이트하라고 말한다.)
 
  • 소스 파일이 또는 dependencies에 있는 헤더파일들 중 어떤 것이라도
        오브젝트 파일보다 더 최근의 것이라면 또는 오브젝트 파일이 존재하지 않는다면
        재컴파일이 반드시 일어나야 한다.
        그래서, 우리가 `insert.c' 를 변경하고 make를 실행하면,
        make는 `insert.o'를 갱신하기 위해서 그 파일을 컴파일할 것이고 `edit'를 링크할 것이다.
 
 
 

'Build > Make' 카테고리의 다른 글

06. Variable  (0) 2020.01.22
05. Rule 의 구성  (0) 2020.01.22
04. Makefile 의 구성  (0) 2020.01.22
02. Build 과정  (0) 2020.01.22
01. make Utility 와 Makefile  (0) 2020.01.22