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 |