• 검색 결과가 없습니다.

cc -c y.c 위 make 파일에서 <tab&gt

N/A
N/A
Protected

Academic year: 2022

Share "cc -c y.c 위 make 파일에서 <tab&gt"

Copied!
3
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

2. make

컴파일트리를 파일로 만들어 저장하고 이 파일에 대해 "make" 명령을 내리면 이 파일의 최종 타겟 (예: myprog)을 최소한의 파일들만 재컴파일하여 만들어준다. myprog에 대한 컴파일 트리를 make 언어로 표현하면

myprog : x.o y.o

<tab> cc x.o y.o -o myprog x.o : x.c x.h

<tab> cc -c x.c y.o : y.c x.h

<tab> cc -c y.c

위 make 파일에서 <tab> 은 키보드의 <tab>키를 의미한다. rule을 입력할 때 명령문 앞에 탭을 입력해야 한다는 것을 보여주고 있다.

3. rule

make 파일은 rule 의 나열이며 각 rule은

target : components ; 의존리스트

<tab> 명령문 ; 명령리스트

의 형태를 갖는다. 의미는 "target"은 "components"에 표시된 파일들로부터 만들어지며 실제 만들때는 "명령문“을 수행하면 된다는 뜻이다.

myprog : x.o y.o

<tab> cc x.o y.o -o myprog

예를 들어 위 규칙은 myprog를 만들기 위해서는 x.o, y.o 두 파일이 필요하며 만드는 방법 은 "cc x.o y.o -o myprog"를 실행하면 된다는 것이다. 앞에 나온 컴파일트리를 그대로 말 로 표현했다는 것을 알 수 있다.

4. 작동

$make 혹은 $make myprog 했을 때 실제로 벌어지는 일은 아래의 4 스텝이다.

1) 현 디렉토리에서 “Makefile"이라는 이름의 파일을 찾든가 없으면 "makefile"이라는 파일을 찾는다.

2) 타겟이 지정이 안된 경우는 ($make 한 경우) 그 파일의 첫번째 타겟을 최종타겟으로 한 다. 지정되어 있으면 ($make myprog 한 경우) 그 타겟이 최종타겟이다. 위 예에서는 두 경 우 모두 최종타겟이 myprog가 된다.

3) 최종타겟의 components에 나와있는 모든 타겟에 대해 recursive 하게 update 한다.

update한다는 것은 위 경우 x.o, y.o 에 대해 관련파일들이 변경되었는지를 살펴보고 변경되 었으면 지정된 명령어를 실행하여 새로운 x.o, y.o를 만드는 것을 의미한다.

4) components중 하나라도 update가 되었으면 최종타겟을 지정된 명령어를 사용하여 다시 만든다. 즉 최종타겟을 update한다.

(2)

myprog make 파일에 대해 make 명령을 내렸을 때 일어나는 사건을 정리해보면 아래와 같 다:

make |

update myprog |

update x.o |

x.c 나 x.h가 변경되었는지 확인.

변경되었으면 cc -c x.c 실행 |

update y.o |

y.c나 y.h가 변경되었는지 확인 변경되었으면 cc -c y.c 실행 |

x.o나 y.o 가 변경되었으면 cc x.o y.o -o myprog 실행

x.c 가 변경되었다면 cc -c x.c 와 cc x.o y.o -o myprog 두 명령어만 실행되어 myprog 를 재컴파일한다는 것을 확인할 수 있다.

5. 매크로, 특수기호(@, $@, $<, $?, $*)

make 파일의 작성을 돕기 위해 매크로와 특수기호들이 사용된다.

1) 매크로

make 파일에 매크로를 정의하여 사용할 수 있다. 예를 들어 아래에서 OBJS가 x.o 와 y.o를 의미하는 매크로로 정의되었다. 매크로의 값은 ${..} 혹은 $(...)와 같이 접근할 수 있다.

OBJS = x.o y.o myprog : ${OBJS}

위는

myprog : x.o y.o 와 동일하다.

2) 특수기호

@ : 명령어앞에 붙여서 이 명령어의 에코 방지

$@ : 타겟이름을 의미한다.

myprog : x.o y.o

cc x.o y.o -o $@

myprog : x.o y.o

cc x.o y.o -o myprog 와 동일하다.

(3)

$< : components 에 있는 이름들을 의미한다.

$? : 변경된 components 들을 의미한다.

$* : 타겟과 component의 공통 base name. 예를 들어 타겟이 xyz.o 이고 componene가 xyz.c 이면 $* 는 xyz.

참조

관련 문서

[r]

The Mann-Whitney test compares sums of ranks - it does not compare medians and does not compare distributions.. Pop-up Ootput screen → review

ㅇ Người bị nhiễm Covid-19 trong nước đang được chính phủ hỗ trợ các chi phí liên quan như chi phí cách ly điều trị, chi phí nhập viện, chi phí chẩn đoán kiểm

Rest, fresh air, sunshine and skillful nursing work miracles every

Types of phase diagrams formed when the high temperature allotrope forms a continuous series of solid solutions with the second component. β Zr ↔ α + β

각자 젂공이 있지만 젂공과 관렦된 젂시․조사․연구만 하는 것이 아니라 때로는 젂공과 무관핚 읷을 해야 하는 경우도 많음. 이러핚 경우에

전주 한옥마을 역사문화자원 활용... 전주

한국현대사에서 마을연구는 한국전쟁 양민학살 연구와 새마을운동 연구에서