make
0. 다중 모듈 프로그램
- 여러 개의 .c 파일로 구성(예: file1.c file2.c ... filen.c 로 구성)
0.1 main.c
#include <stdio.h>
#include "sum.h"
int main() { int x, y, z;
printf("Insert 2 Numbers: ");
scanf("%d %d", &x, &y);
z = sum(x, y) + INIT_VALUE;
printf("sum = %d\n", z);
}
0.2 sum.h
#define INIT_VALUE 100 int sum(int, int);
0.3 sum.c
#include <stdio.h>
#include "sum.h"
int sum(int a, int b) { int c;
c = a + b;
return c;
}
0.3 실행
$gcc –o sum main.c sum.c 또는
$gcc –c main.c ; main.o 생성
$gcc –c sum.c ; sum.o 생성
$gcc –o sum main.o sum.o
실행파일 sum을 만든다.
1. 컴파일 트리
myprog
x.o y.o
x.c x.h y.c
위 컴파일 트리는 myprog라는 실행파일이 어떤 파일들에 의해 만들어지는 가를 보여주고 있 다. myprog는 x.o 와 y.o 라는 두 오브젝트파일이 링크되어 만들어진다.
cc x.o y.o -o myprog
오브젝트 파일은 컴파일은 되었지만 아직 링크되지 않은 파일이다. x.o 와 y.o 는 다시 각각 x.c, x.h (x.o 의 경우), y.c, x.h (y.o 의 경우)에 의해 만들어진다.
x.c: #include "x.h"
foo(){...}
y.c: #include "x.h"
foo1(){....}
cc -c x.c cc -c y.c
결국 myprog 파일이 만들어지는 과정은 1) cc -c x.c : x.o 생성
2) cc -c y.c : y.o 생성 3) cc x.o y.o -o myprog
와 같은 3 단계를 거친다. 만일 우리가 이중 어느 한 파일을 변경한다면 모든 스텝을 다 되풀 이해도 되지만 컴파일 트리를 보고 필요한 부분만 재컴파일하는 것이 더 효율적이다. 예를 들 어 x.c 가 변경되었다면 1)과 3)만 수행하면 된다. 2)의 결과물인 y.o는 x.c 가 변경된다 해도 변하지 않기 때문에 다시 컴파일 하는 것은 자원의 낭비일 뿐이다.