티스토리 뷰

Motivation

Small programs -> single file

모든 소스코드를 하나에 파일에 담을수 있다. 하지만 파일이 커지면 코드의 라인 수가 많아진다. 또, 하나에 파일 안에 점점 많은 모듈과 컴포넌트가 생기게 된다.

프로그램이 점점 커지게 되면, 여러 함수들 간에 호출관계를 파악하기 어렵다. 또 , 컴파일 되는데 소요되는 시간이 굉장히 오래 걸린다. 사소한 파일 수정역시 컴파일 과정을 겪어야 함으로 비효율 적이다.

그래서 컴포넌트들을 분할하는것이 필요하다. 여러개로 나누어서 관리하는것이다. 모듈들을 나누는것이 일반적으로 소프트웨어 개발에 필요한것 이다.  파일을 나눔으로써 변경된 파일만 컴파일 하면 되기 때문에 앞서말한 문제점 역시 해결된다.

 

Mozilla Example

소스코드 트리이다.  2500개의 subdirectory를 담고있다.

여러 디렉토리로 나누는것이 바람직하다고 말하는데 이에 있어서 어려운점은 파일갯수가 많다보니, 해당하는 명령어를 하나하나 입력하기 어렵다. 또 , 어떤 파일이 어떻게 변경됬는지 알아야 컴파일이 가능한데 찾기가 다소 어렵다.  파일의 의존성을 체계적으로 관리하는것도 중요한 문제이다.

이런 문제를 해줄수 있는것이 make utility이다.

 

makefile

make파일은 스크립트로써 파일을 규칙적으로 적어준다. 여러가지 컴파일에 필요한 규칙과 커맨드를 기입해 놓으면 make라는 명령어로 통해서 해석하고 컴파일 과정을 자동으로 수행할 수 있다.

 

How make works?

작성한 make 파일을 읽고 상위 타겟을 만든다.

타겟을 만드는데 또다른 파일들이 필요하면 사용하고 , 없으면 만든다.

{Works backward through the chain of dependencies) 한번 타겟이 만들어지면 그 타겟이 의존하는 파일들 보다 오래되었을경우만 컴파일을 새로 해서 타겟을 생성한다. 타겟이 오래되었는지 알수있는 방법은 파일의 시간을 체크하고 비교함으로써 알아 낸다. }

 

 

Example

 

main.c  sum.c sum.h 의 3개의 파일로 구성되어있다. main.c 와 sum.c 는 sum.h를 include 하고 있다.

sum.c라는 최종 오브젝트 실행 파일은 main.o 와 sum.o에 의존하고 있다고 말할수 있다. main.o는 main.c 로부터 만들어나온다. 마찬가지로 sum.o는 sum.c와 sum.h에 의존 한다.

소스코드들이 서로 의존성을 띄고 있을때 makefile로 만들어 볼수있다.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31